优草派  >   Python

python2.7出现无法编码?解决无法写入txt的办法

陈立鑫            来源:优草派

很多开发者在使用python2.7以及txt文件读写的小伙伴们都出现了无法写入的问题,这个问题也很让开发者们懊恼,怎么都找不出这个问题的原因所在。接下来让我来教大家如何来处理python2.7无法写入txt的解决方案。

python1

首先,如果开发者遇见了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()
【原创声明】凡注明“来源:优草派”的文章,系本站原创,任何单位或个人未经本站书面授权不得转载、链接、转贴或以其他方式复制发表。否则,本站将依法追究其法律责任。
TOP 10
  • 周排行
  • 月排行