我的python脚本中有一些非ascii数据。
python可以正确处理它们,但是当我想保存它们时会出错。所以我用str.encode()
对它们进行编码,然后将它们写入文件。
用于读取文件和解码数据我在python 2.7中使用str.decode()
没有问题 - 来自读取文件的数据是字符串 - 但在python 3.6中没有任何str.decode()
函数和我遇到了问题。
即使在整个python官方文档中,我也无法在任何地方找到答案。
示例代码:忽略案例请在此时使用手机编写
string="hello=سلام -in persian"
file=open("file.txt",'w+', encoding='utf-8')
file.write(string.encode())
# using file.write(string) raises an error
print(file.read())# if the whole string be in Persian prints sth like b'\xff\xa3....'
file.read().decode()# raises an error contains: str object doesn'have attribute decode
# here was my problem in updating from 2.7 to 3.6
file.close()
`
答案 0 :(得分:1)
对于python 3.您应该使用str
将bytes
写为文件str.encode()
,然后将文件作为写二进制模式open('filename.txt', 'wb')
打开。在读取时,将文件读取为读取二进制模式。 open('filename.txt', 'rb')
并使用bytes.decode()
将其转换回str
。
您可以将此作为参考:
utfchar = '¶'
with open('filename.txt', 'wb') as fp:
fp.write(utfchar.encode())
# and later:
with open('filename.txt', 'rb') as fp:
utfchar = fp.read().decode()
assert utfchar == '¶'
答案 1 :(得分:0)
在Python 3中,您只需编写字符串:
with open('file.txt', 'w+', encoding='utf-8') as f:
f.write("hello=שלום in Hebrew")