读一个zip并将其写入另一个文件python

时间:2011-11-24 01:53:35

标签: python zip

我想读取一个文件并将其写回。这是我的代码:

   file = open( zipname , 'r' )
   content =  file.read() 
   file.close()

   alt = open('x.zip', 'w')
   alt.write(content )
   alt.close()

这不起作用,为什么?????

编辑:

重写的文件已损坏 (Windows上的python 2.7.1)

3 个答案:

答案 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)

来自this bit of the manual

  

在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')