PyQt4 QTableWidget
からcsv形式のテキストファイルを作成しようとしています。テキストに特殊文字が含まれているため、UTF-8エンコーディングでテキストを書きたいです。私は次のコードを使用します:
import codecs
...
myfile = codecs.open(filename, 'w','utf-8')
...
f = result.table.item(i,c).text()
myfile.write(f+";")
セルに特殊文字が含まれるまで機能します。私も試しました
myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
ただし、特殊文字が表示されると停止します。何が間違っているのかわかりません。
シェルから実行:
pip2 install unicodecsv
そして(元の質問とは異なり)Pythonの組み込みcsv
モジュールを使用していると仮定して、有効にしますimport csv
にimport unicodecsv as csv
コード内。
このパッケージを使用すると、動作します: https://github.com/jdunck/python-unicodecsv 。
私にとっては、Python 2 CSVモジュールのドキュメントからのUnicodeWriter
クラスは、csv.writer.write_row()
インターフェイスを破壊するため、実際には機能しませんでした。
例えば:
csv_writer = csv.writer(csv_file)
row = ['The meaning', 42]
csv_writer.writerow(row)
動作する一方で:
csv_writer = UnicodeWriter(csv_file)
row = ['The meaning', 42]
csv_writer.writerow(row)
AttributeError: 'int' object has no attribute 'encode'
をスローします。
UnicodeWriter
は明らかにすべての列の値が文字列であることを期待しているため、値を自分で変換し、デフォルトのCSVモジュールを使用することができます。
def to_utf8(lst):
return [unicode(elem).encode('utf-8') for elem in lst]
...
csv_writer.writerow(to_utf8(row))
または、csv_writerをモンキーパッチしてwrite_utf8_row
関数を追加することもできます。演習は読者に任されています。
Pythonドキュメントの例は、Unicode CSVファイルの記述方法を示しています。 http://docs.python.org/2/library/csv.html#examples
(コードは著作権で保護されているため、ここにコピーできません)
python2の場合、csv_writer.writerows(rows)
の前にこのコードを使用できます
このコードは、整数をutf-8文字列に変換しません
def encode_rows_to_utf8(rows): encoded_rows = [] 行の行: encoded_row = [] 行の値: if isinstance(value、basestring): value = unicode(value).encode( "utf-8") encoded_row.append(value) encoded_rows。 append(encoded_row) return encoded_rows