很多开发者在使用python2.7以及txt文件读写的小伙伴们都出现了无法写入的问题,这个问题也很让开发者们懊恼,怎么都找不出这个问题的原因所在。接下来让我来教大家如何来处理python2.7无法写入txt的解决方案。
首先,如果开发者遇见了python2.7无法写入txt问题的时候,有可能是python2
.7中编码出现了问题。这个时候我们要能够明白一个点:那就是在py文件和python动态解释器(命令行)中,开发者输入的中文字符串编码是不一样的,动态解释器中默认编码环境是ansi,比较麻烦,建议在py文件中处理编码问题。
python2.7中的字符串有两种形式:str”…”和 unicode u”\u…”
下面我们来看具体案例如何来修改,首先解决python2.7的编码问题:
在py文件中解决python2.7编码的问题具体案例如下:
#coding:utf-8 s = "中文" # '\xe4\xb8\xad\xe6\x96\x87' # 一个汉字用3个utf-8字节码表示,因此s的长度是6 unis = u"中文" # u'\u4e2d\u6587 # 一个汉字用一个unicode表示,因此unis的长度为2 utf8s = unis.encode('utf-8') # '\xe4\xb8\xad\xe6\x96\x87' # unicode对象可以编码为utf-8 uni_utf8s = utf8s.decode("utf-8") # u'\u4e2d\u6587 # 反之,utf-8格式str可以解码为unicode
解决了编码问题现在来解决txt文件的读写:
# coding:UTF-8 # 导入codecs包不容易出错 import codecs # 若open函数中的文件路径若有中文字符则需要使用unicode字符串,否则解释器会报错 # 下面一个例子是,将一个utf-8编码保存的txt文件打开,修改一部分内容后保存到一个新建的utf-8编码txt文件中 fread = open(u'D:\\Demo\\python杂项\\hellopython.txt','r') # utf-8 格式的字节码 rows = fread.readlines() fread.close() r1 = rows[0] # txt的文件一般开头都会有字节块来说明编码类型 # '\xef\xbb\xbf......'前三个字节码表示该txt文件以utf-8编码保存 # 解码后为u'\ufeff......' # 然后使用codecs可以直接新建一个使用utf-8编码保存的txt文件 fwrite_codecs = codecs.open(u'D:\\Demo\\python杂项\\新建的utf8.txt','a','utf-8') for row in rows: # 解码 unicode 码 unirow = row.decode('utf-8') # 等价于 wangls = u'陈某某' wangls = u'\u738b\u8001\u5e08' # 查找是否有'陈某某',有则跳过该行 if unirow.find(wangls) > -1: continue else: # codecs 的write可以把unicode直接编码为utf-8后写入 fwrite_codecs.write(unirow + '\r\n') fwrite_codecs.close() print 'done' # 已有txt是utf-8编码的情况: # 代码文本中的"str"中文默认为 utf-8,因此直接写入即可 # 或者将unicode编码成utf-8再写入,两者是等价的 fwrite = open(u'D:\\Demo\\python杂项\\2.txt','a') s1 = "这是一行中文" s2 = u"这是一行中文".encode('utf-8') # s1 == s2 True fwrite.write(s1) fwrite.close()