2011-04-05 36 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。

相关问题