Python2随机写入二进制文件:
def save(text, filename='temp', path='download'):
fpath = os.path.join(path, filename)
with open(fpath, 'w') as f:
print('output:', fpath)
f.write(text)
但使用Python3会报错:
TypeError:must be str, not bytes
原因为:Python3给open函数添加了名为encoding的新参数,而这个新参数的默认值却是‘utf-8’。这样在文件句柄上进行read和write操作时,系统就要求开发者必须传入包含Unicode字符的实例,而不接受包含二进制数据的bytes实例。
解决方法:
使用二进制写入模式(‘wb’)来开启待操作文件,而不能像原来那样,采用字符写入模式(‘w’)。
同时适配Python3和Python2的方法:
def save(text, filename='temp', path='download'):
fpath = os.path.join(path, filename)
with open(fpath, 'wb') as f:
print('output:', fpath)
f.write(text)
文件读取数据的时候也有类似的问题。解决这种问题的办法也相似:用'rb'模式(二进制模式)打开文件,而不要使用'r'模式。
原文:https://blog.csdn.net/kingyuan666/article/details/81214954