Python - 以UTF-16LE格式保存CSV文件
我需要把一些数据导入到我的Yahoo营销账户里,而这个CSV文件必须使用特定的编码格式 - Yahoo要求CSV/TSV文件使用Unicode编码(实际上是UTF-16LE编码)。
writer = csv.writer(open('new_yahoo.csv','w', encoding='utf-16-le'), delimiter="\t")
writer.writerows(reader)
2 个回答
0
如果你往下滚动查看Python CSV的示例页面,你会发现:
csv模块并不直接支持读取和写入Unicode(即中文、日文等字符),但它在处理8位字符时是比较干净的,除了在处理ASCII NUL字符时可能会遇到一些问题。所以你可以写一些函数或类来帮你处理编码和解码,只要避免使用像UTF-16这样的编码,因为它会用到NUL字符。推荐使用UTF-8。
不过,如果你确实需要处理Unicode,看起来下面这个方法可能会有帮助:
下面的unicode_csv_reader()是一个生成器,它封装了csv.reader,可以处理Unicode CSV数据(也就是一系列Unicode字符串)。
...
对于其他编码,可以使用下面的UnicodeReader和UnicodeWriter类。它们在构造时需要一个额外的编码参数,并确保数据以UTF-8编码传递给真正的读取器或写入器:
所以看起来他们在底部提供的示例应该可以满足你想要的编码需求。
0
看起来你在用Python 3.X,因为你用了open
这个命令。你现在的代码应该是可以工作的,不过你可能还需要定义一下newline
这个参数。newline=''
会使用系统默认的换行符(比如在Windows上是CRLF),不过Yahoo可能有其他的要求。下面的代码在Windows上生成了带有CRLF换行符的文件,效果很好。
data = [
['One','Two','Three'],
[1,2,3],
[4,5,6],
[7,8,9]]
import csv
f = open('new_yahoo.csv','w', newline='', encoding='utf-16-le')
writer = csv.writer(f, delimiter='\t')
writer.writerows(data)
f.close()