2011-04-05 35 views
0

我做了一個腳本下載一個文件,但是當我下載的二進制可執行文件,SWF的,圖像等Windows上的二進制文件有什麼用?

\#Modfied section from PWB.py 
import sys 
if sys.version_info<(2,8): 
    import urllib as request 
else: 
    import urllib.request as request 
x=request.urlopen("http://homestarrunner.com/intro.swf") 
y=x.read() 
x.close() 
z=open("intro.swf","w") 
z.write(y) 
z.close() 

我將獲得的文件時,它只能在Unix/Linux/OSX,以及通常不可讀的垃圾在文件中,但它將是不可讀的。

看來二進制文件在Windows上總是有這些問題。 這是爲什麼?

PS。我怎麼能寫我的Python代碼,以便下載?

回答

6

Python 2 documentation

在Windows中, 'B' 附加到模式 以二進制方式打開文件,所以 也有模式,如 'RB', 'WB', 和「 R + b」。 Windows上的Python使 文件與二進制文件 之間的區別;當讀取或寫入數據時, 文本文件中的行尾字符會自動更改爲 。 對 文件數據的這種後臺修改對於ASCII文本 文件來說很好,但它會像JPEG或EXE文件中那樣破壞二進制數據 。當 讀寫這類文件時,要非常小心地使用二進制模式。在 Unix上,將'b' 添加到該模式並不會造成任何影響,因此您可以在所有二進制 文件中使用它的平臺無關的 。

+2

更確切地說:在文本模式下閱讀時,平臺的本機行結束符(Windows上的\ r \ n)被轉換爲Python的Unix風格\ n行尾。在文本模式下書寫時,會發生相反的情況。在UNIX上沒有這樣的問題。 – KrisWebDev 2013-06-30 11:54:53

7

以二進制模式打開二進制文件。

z = open("intro.swf","wb") 
0

你必須在參數中使用「WB」爲open()來得到它的二進制模式 - 默認爲文本模式,\ n轉換爲CR/LF。

相關問題