所以我正在尝试编写一个脚本来下载python的图片文件,我发现这个def使用谷歌,但我得到它下载的每张图片都出现“腐败”。任何想法......
def download(url):
"""Copy the contents of a file from a given URL
to a local file.
"""
import urllib
webFile = urllib.urlopen(url)
localFile = open(url.split('/')[-1], 'w')
localFile.write(webFile.read())
webFile.close()
localFile.close()
编辑:代码标签没有很好地保留缩进,但我可以向你保证他们在那里,这不是我的问题。
答案 0 :(得分:6)
答案 1 :(得分:5)
您需要以二进制模式打开本地文件:
localFile = open(url.split('/')[-1], 'wb')
否则二进制流中的CR / LF字符将被破坏,从而破坏文件。
答案 2 :(得分:3)
如果您打算编写二进制文件,则必须包含'b'标志。第7行变为:
localFile = open(url.split('/')[-1], 'wb')
代码无需工作,但将来您可能会考虑:
我会将您的代码重写为:
import urllib
import os.path
def download(url):
"""Copy the contents of a file from a given URL
to a local file in the current directory.
"""
with urllib.urlopen(url) as webFile:
with open(os.path.basename(url), 'wb') as localFile:
localFile.write(webFile.read())
答案 3 :(得分:2)
它出现了损坏,因为您正在使用的函数是将字节写入文件,就好像它是纯文本一样。但是,您需要做的是以二进制模式(wb
)将字节写入其中。以下是您应该做的事情:
import urllib
def Download(url, filename):
Data = urllib.urlopen(url).read()
File = open(filename, 'wb')
File.Write(Data)
#Neatly close off the file...
File.flush()
File.close()
#Cleanup, for you neat-freaks.
del Data, File
答案 4 :(得分:0)