美文网首页
Python2向文件写入Unicode字符

Python2向文件写入Unicode字符

作者: 马小跳_ | 来源:发表于2018-06-29 15:28 被阅读30次

    原博客:https://blog.csdn.net/qq_16912257/article/details/52127762

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

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

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

    代码示例:

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

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

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

    这里介绍3种方法

    (1)使用UnicodeWriter

    csv模块文档给出了处理unicode字符串的方法示例

    代码示例:

    # -*- coding: utf-8 -*-
    import csv
    import codecs
    import 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):
            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你好哈哈'
    file_name = 'C:\Users\DELL\Desktop\test.csv'
    writer = UnicodeWriter(open(file_name, 'wb'), delimiter=',')
    writer.writerow([name])
    
    12345678910111213141516171819202122232425262728293031
    

    注意:

    1. 如果是以追加方式写入文件,假设文件存在,请确保此文件格式为utf-8;
    2. 文件要以二进制模式打开。

    (2)使用unicodecsv代替csv

    unicodecsv和csv使用方式一样。

    import unicodecsv as csv
    
    file_name = 'XX'
    writer = csv.writer(open(file_name, 'wb'))
    writer.writerow(XX)12345
    

    (3)setdefaultencoding

    在py文件头添加下面3行:

    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')123
    

    并不建议使用这种方式,因为这样将会告诉python你接下来运行的所有代码(包括一些第三方库)都将改变成utf8编码,某些第三方库可能就不能被正常使用了。详见 Why sys.setdefaultencoding() will break code

    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

    相关文章

      网友评论

          本文标题:Python2向文件写入Unicode字符

          本文链接:https://www.haomeiwen.com/subject/rdyayftx.html