我制作了一个脚本来下载文件,但是当我下载二进制可执行文件,swf,图像等时,它只能在Unix / Linux / OSX上运行
\#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()
我将获取该文件,以及文件中通常不可读的垃圾,但它将无法读取。
似乎二进制文件在Windows上总是存在这些问题。 这是为什么?
PS。我怎么能写下我的python代码才能下载?
答案 0 :(得分:7)
以二进制模式打开二进制文件。
z = open("intro.swf","wb")
答案 1 :(得分:6)
在Windows上,“b”附加到模式 以二进制模式打开文件,所以 还有像'rb','wb'这样的模式, 和'r + b'。 Windows上的Python制作了一个 文本和二进制之间的区别 文件;中的行尾字符 文本文件会自动更改 稍微读取或写入数据时。 这种幕后修改 文件数据适用于ASCII文本 文件,但它会破坏二进制数据 像在JPEG或EXE文件中那样。是 非常小心使用二进制模式时 读写这样的文件。上 Unix,附加一个'b'也没有坏处 到模式,所以你可以使用它 平台 - 独立于所有二进制文件 文件。
答案 2 :(得分:0)
在Windows上使用z=open("intro.swf","wb")
以二进制模式打开文件。
答案 3 :(得分:0)
你必须在open()的参数中使用“wb”来使它处于二进制模式 - 默认是文本模式,它将\ n转换为CR / LF。