Python2向文件写入Unicode字符

来源:互联网 发布:卖家怎么弄淘宝客 编辑:程序博客网 时间:2024/05/16 03:58

总的思路:就是把所有unicode字符转化为utf-8编码格式然后写出文件。(为了节省内存,文件中数据并不直接以unicode格式存储,而是以utf-8存储)

1.向普通文本文件写入Unicode字符

python内置库中的open方法只能读写ascii码,如果想写入Unicode字符,需要使用codecs包

代码示例:

# -*- coding: utf-8 -*-import codecscontent = u'你好'f = codecs.open(r'c:/test.txt', 'w', 'utf-8')f.write(content)

我们可以看到codecs包中的open函数可以传入编码参数。

2.向csv文件中写入Unicode字符

csv模块也是默认不支持unicode字符,但是模块文档给出了处理unicode字符串的方法示例

代码示例:

# -*- coding: utf-8 -*-import csvimport codecsimport cStringIO# 这个类来自官方文档class UnicodeWriter:    def __init__(self, f, dialect=csv.excel, encoding="utf-8-sig", **kwds):        self.queue = cStringIO.StringIO()        self.writer = csv.writer(self.queue, dialect=dialect, **kwds)        self.stream = f        self.encoder = codecs.getincrementalencoder(encoding)()    def writerow(self, row):        '''writerow(unicode) -> None        This function takes a Unicode string and encodes it to the output.        '''        self.writer.writerow([s.encode("utf-8") for s in row])        data = self.queue.getvalue()        data = data.decode("utf-8")        data = self.encoder.encode(data)        self.stream.write(data)        self.queue.truncate(0)    def writerows(self, rows):        for row in rows:            self.writerow(row)name = u'BrownWong你好哈哈'with open(r'C:\Users\DELL\Desktop\test.csv', 'ab') as infile:    writer = UnicodeWriter(infile, delimiter=',')    writer.writerow([name])

注意:
1. 这里的open函数不能使用codecs模块里面的,而要使用内置库中的open函数。
2. 如果是以追加方式写入文件,假设文件存在,请确保此文件格式为utf-8.



Ref
http://stackoverflow.com/questions/17245415/read-and-write-csv-files-including-unicode-with-python-2-7
https://docs.python.org/2/library/csv.html

1 0