Mar*_*tin 77 python csv encoding utf-8
我试图用PyQt4创建一个csv格式的文本文件QTableWidget.我想用UTF-8编码来编写文本,因为它包含特殊字符.我使用以下代码:
import codecs
...
myfile = codecs.open(filename, 'w','utf-8')
...
f = result.table.item(i,c).text()
myfile.write(f+";")
Run Code Online (Sandbox Code Playgroud)
它一直有效,直到单元格包含特殊字符.我也尝试过
myfile = open(filename, 'w')
...
f = unicode(result.table.item(i,c).text(), "utf-8")
Run Code Online (Sandbox Code Playgroud)
但是当出现特殊字符时它也会停止.我不知道我做错了什么.
fif*_*nce 101
从你的shell运行:
pip2 install unicodecsv
Run Code Online (Sandbox Code Playgroud)
而且(不同于原来的问题)假设你正在使用Python的内置csv模块,转
import csv成
import unicodecsv as csv在你的代码.
Zan*_*non 70
Python 3.x(docs)非常简单.
import csv
with open('output_file_name', 'w', newline='', encoding='utf-8') as csv_file:
writer = csv.writer(csv_file, delimiter=';')
writer.writerow('my_utf8_string')
Run Code Online (Sandbox Code Playgroud)
对于Python 2.x,请看这里.
对我来说UnicodeWriter,Python 2 CSV 模块文档中的类并没有真正起作用,因为它破坏了csv.writer.write_row()界面。
例如:
csv_writer = csv.writer(csv_file)
row = ['The meaning', 42]
csv_writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)
有效,同时:
csv_writer = UnicodeWriter(csv_file)
row = ['The meaning', 42]
csv_writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)
会扔AttributeError: 'int' object has no attribute 'encode'。
作为UnicodeWriter显然希望所有列的值是字符串,我们可以将这些值自己和只使用默认CSV模块:
csv_writer = csv.writer(csv_file)
row = ['The meaning', 42]
csv_writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)
或者我们甚至可以修补 csv_writer 来添加一个write_utf8_row函数——这个练习留给读者。