首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python下载器

Python下载器
EN

Stack Overflow用户
提问于 2010-11-04 08:48:11
回答 5查看 1.3K关注 0票数 2

所以我试着写一个脚本,用python下载一个图片文件,我用google找到了这个def,但是我下载的每张图片都“损坏”了。任何想法..。

代码语言:javascript
复制
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()

编辑:代码标签没有很好地保留缩进,但我可以向你保证它们就在那里,这不是我的问题。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-04 08:51:51

您需要以二进制模式打开本地文件:

代码语言:javascript
复制
localFile = open(url.split('/')[-1], 'wb')

否则二进制流中的CR/LF字符将被损坏,从而损坏文件。

票数 5
EN

Stack Overflow用户

发布于 2010-11-04 08:57:17

你可以使用simply do

代码语言:javascript
复制
urllib.urlretrieve(url, filename)

省去你自己的麻烦。

票数 6
EN

Stack Overflow用户

发布于 2010-11-04 08:56:52

如果您打算写入二进制文件,则必须包含'b‘标志。第7行变成:

代码语言:javascript
复制
localFile = open(url.split('/')[-1], 'wb')

代码不需要工作,但在将来您可能会考虑:

在functions.

  • Using os.path.basename外部导入
  • ,而不是通过字符串解析来获取路径的名称部分。
  • 使用with语句来管理文件,而不必手动关闭它们。它使您的代码更加整洁,并确保在您的代码抛出异常时正确地关闭它们。

我会将你的代码重写为:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4093007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档