Подтвердить что ты не робот

AttributeError: объект 'module' не имеет атрибута 'urlretrieve'

Я пытаюсь написать программу, которая будет загружать mp3 с сайта, а затем объединить их, но всякий раз, когда я пытаюсь загрузить файлы, я получаю эту ошибку:

Traceback (most recent call last):
File "/home/tesla/PycharmProjects/OldSpice/Voicemail.py", line 214, in <module> main()
File "/home/tesla/PycharmProjects/OldSpice/Voicemail.py", line 209, in main getMp3s()
File "/home/tesla/PycharmProjects/OldSpice/Voicemail.py", line 134, in getMp3s
raw_mp3.add = urllib.urlretrieve("http://www-scf.usc.edu/~chiso/oldspice/m-b1-hello.mp3")
AttributeError: 'module' object has no attribute 'urlretrieve'

Линией, которая вызывает эту проблему, является

raw_mp3.add = urllib.urlretrieve("http://www-scf.usc.edu/~chiso/oldspice/m-b1-hello.mp3")
4b9b3361

Ответ 1

Поскольку вы используете Python 3, модуля urllib больше нет. Он был разделен на несколько модулей.

Это будет эквивалентно urlretrieve:

import urllib.request
data = urllib.request.urlretrieve("http://...")

urlretrieve ведет себя точно так же, как в Python 2.x, поэтому он будет работать нормально.

В принципе:

  • urlretrieve сохраняет файл во временном файле и возвращает кортеж (filename, headers)
  • urlopen возвращает объект Request, метод read возвращает байтовую строку, содержащую содержимое файла

Ответ 2

Совместимое с Python 2 + 3 решение:

import sys

if sys.version_info[0] >= 3:
    from urllib.request import urlretrieve
else:
    # Not Python 3 - today, it is most likely to be Python 2
    # But note that this might need an update when Python 4
    # might be around one day
    from urllib import urlretrieve

# Get file from URL like this:
urlretrieve("http://www-scf.usc.edu/~chiso/oldspice/m-b1-hello.mp3")