如何在CSV文件中编写UTF-8

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在你的代码.

  • 它只是通过替换导入不起作用,我还必须在创建编写器时添加编码:`writer = csv.writer(out,dialect ='excel',encoding ='utf-8')`,并创建`open(...`,**not**`codecs.open(...`)的文件处理程序. (25认同)
  • 我尝试了StackOverflow上的所有建议,只有这个对我有用. (4认同)

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,请看这里.

  • 如果 `writerow` 的内容不是 utf-8 怎么办?会起作用吗? (2认同)

Gij*_*ijs 14

使用这个包,它只是工作:https://github.com/jdunck/python-unicodecsv.


Boj*_*vic 5

对我来说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函数——这个练习留给读者。