python2和python3向csv檔案中寫入Unicode字元
阿新 • • 發佈:2019-02-07
1、python2向csv檔案寫入中文或者unicode,可以參考UnicodeWriter類
https://blog.csdn.net/qq_16912257/article/details/52127762
2、python3中字串都變成了unicode編碼,並且取消了cStringIO類,需要對UnicodeWriter類進行修改。
# -*- coding: utf-8 -*- import csv import codecs from io import StringIO # 這個類來自官方文件 class UnicodeWriter: def __init__(self, f, dialect=csv.excel, encoding="utf-8-sig", **kwds): self.queue = StringIO() self.writer = csv.writer(self.queue, dialect=dialect, **kwds) self.stream = f self.encoder = codecs.getincrementalencoder(encoding)() def writerow(self, row): self.writer.writerow(row) data = self.queue.getvalue() data = self.encoder.encode(data) self.stream.write(data) self.queue.truncate(0) self.queue.seek(0)#for python3 def writerows(self, rows): for row in rows: self.writerow(row) if __name__ == '__main__': name = u'BrownWong你好哈哈' file_name = './test.csv' writer = UnicodeWriter(open(file_name, 'wb'), delimiter=',') writer.writerow([name])
writer.writerow([name])
需要注意的是:python3中StringIO.truncate(0)函式不會重置當前位置,需要單獨在用seek(0)將位置重置到頭。否則在truncate(0)了,write會填充0。
'\x00\x00\x00
StringIO在python2和python3的不同,
具體的原因可以看下面的帖子:
https://stackoverflow.com/questions/4330812/how-do-i-clear-a-stringio-object