我想讀取文件並將其寫回。這裏是我的代碼:閱讀壓縮文件並將其寫入其他文件python
file = open(zipname , 'r')
content = file.read()
file.close()
alt = open('x.zip', 'w')
alt.write(content)
alt.close()
這不起作用,爲什麼?????
編輯:
重寫的文件已損壞 (在Windows蟒蛇2.7.1)
我想讀取文件並將其寫回。這裏是我的代碼:閱讀壓縮文件並將其寫入其他文件python
file = open(zipname , 'r')
content = file.read()
file.close()
alt = open('x.zip', 'w')
alt.write(content)
alt.close()
這不起作用,爲什麼?????
編輯:
重寫的文件已損壞 (在Windows蟒蛇2.7.1)
讀取和二進制模式, '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'的換行符翻譯了壓縮文件中的二進制數據。
如果我在我的OS X或Linux機器上運行此程序,它的工作原理與您的預期完全相同。文件x.zip
與原始zip文件具有完全相同的校驗和,並且沒有損壞。我相信Windows是需要以二進制模式顯式打開文件的平臺之一;嘗試:
file = open(zipname, 'rb')
在Windows中, 'B' 附加到模式打開文件以二進制模式,所以 也有模式,如 'RB', 'WB',和'r + b'。 Windows上的Python 區分了文本和二進制文件;在讀取或寫入數據 時,文本文件末尾的 字符會稍微自動更改。這種對文件數據 的後臺修改對於ASCII文本文件來說很好,但它會破壞JPEG或EXE文件中的 這樣的二進制數據。當讀取 並編寫這些文件時,請非常小心地使用二進制模式。在Unix上,將模式追加'b'並不會傷害到該模式,因此您可以在所有二進制 文件中獨立使用它。
+1爲高質量參考:-) –
Python 3變得更糟。在Python 3中,編碼在讀/寫時應用,所有字符串都是Unicode。簡單的講話:在所有平臺上,不僅僅是線路結局可以改變。這意味着當所有平臺上的文件都是二進制文件時,人們需要標記文件,否則他們將花費更多的時間移植到Python 3。 – yam655
感謝你們,當我試圖上傳Zipfile到Dropbox(在Windows上,OSX很好)時,我瘋了。 –