我想读取一个文件并将其写回。这是我的代码:
file = open( zipname , 'r' )
content = file.read()
file.close()
alt = open('x.zip', 'w')
alt.write(content )
alt.close()
这不起作用,为什么?????
编辑:
重写的文件已损坏 (Windows上的python 2.7.1)
答案 0 :(得分:9)
以二进制模式'rb'和'wb'读取和写入:
f = open(zipname , 'rb')
content = f.read()
f.close()
alt = open('x.zip', 'wb')
alt.write(content )
alt.close()
文本模式在Windows上不起作用的原因是从'\ r \ n'到'\ r'的换行符翻译了zip文件中的二进制数据。
答案 1 :(得分:6)
在Windows上,附加到模式的'b'以二进制模式打开文件,所以 还有'rb','wb'和'r + b'等模式。 Windows上的Python 区分文本和二进制文件;行尾 文本文件中的字符会在数据时自动更改 被读或写。这种对文件数据的幕后修改 适用于ASCII文本文件,但它会破坏这样的二进制数据 在JPEG或EXE文件中。阅读时要非常小心使用二进制模式 并写这样的文件。在Unix上,附加'b'并没有什么坏处 模式,所以你可以平台独立使用它为所有二进制文件 文件。
答案 2 :(得分:1)
如果我在OS X或Linux机器上运行此程序,它的工作方式与您期望的完全相同。文件x.zip
与原始zip文件具有完全相同的校验和,并且没有损坏。我相信Windows是您需要以二进制模式显式打开文件的平台之一;尝试:
file = open(zipname, 'rb')