Python 3.5中urllib.urlretrieve的替代方案

Cod*_*ead 2 python urllib2 python-3.x

我目前正在UDACITY学习机器学习课程.在那里他们已经在python 2.7中编写了一些代码,但由于我目前正在使用python 3.5,我收到了一些错误.这是代码

import urllib
url = "https://www.cs.cmu.edu/~./enron/enron_mail_20150507.tgz"
urllib.urlretrieve(url, filename="../enron_mail_20150507.tgz")
print ("download complete!") 
Run Code Online (Sandbox Code Playgroud)

我试过urllib.request.

  import urllib
  url = "https://www.cs.cmu.edu/~./enron/enron_mail_20150507.tgz"
  urllib.request(url, filename="../enron_mail_20150507.tgz")
  print ("download complete!")
Run Code Online (Sandbox Code Playgroud)

但仍然给我错误.

urllib.request(url, filename="../enron_mail_20150507.tgz")
TypeError: 'module' object is not callable
Run Code Online (Sandbox Code Playgroud)

我使用PyCharm作为我的IDE.

mgi*_*son 8

你用的urllib.request.urlretrieve.请注意,此函数"可能会在将来的某个时候被弃用",因此您可能最好使用不太可能被弃用的接口:

# Adapted from the source:
# https://hg.python.org/cpython/file/3.5/Lib/urllib/request.py#l170
with open(filename, 'wb') as out_file:
    with contextlib.closing(urllib.request.urlopen(url)) as fp:
        block_size = 1024 * 8
        while True:
            block = fp.read(block_size)
            if not block:
                break
            out_file.write(block)
Run Code Online (Sandbox Code Playgroud)

对于足够小的文件,你可以只是readwrite整个事情完全放弃循环.

  • 这就是我需要的,但天哪,它太丑了。 (2认同)