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


82

Я намагаюся написати програму, яка завантажує 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")

Відповіді:


211

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

Це було б еквівалентно urlretrieve:

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

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

В основному:

  • urlretrieve зберігає файл у тимчасовому файлі та повертає кортеж (filename, headers)
  • urlopenповертає Requestоб'єкт, readметод якого повертає байтовий рядок, що містить вміст файлу

2
Якби я хотів завантажити .mp3 файли до списку, це все одно спрацювало б?
Sike1217

3
Натрапила на цю помилку при роботі з підручником машинного навчання Google (я новачок у python, тому ваша відповідь дуже вдячна) tensorflow.org/tutorials/mnist/beginners/index.md
Кріс Сміт,

10

Сумісне рішення 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")

@ tim654321 Я його змінив. Ви маєте рацію, є ймовірність того, що це буде те саме для Python 3 та пізніших версій.
Мартін Тома

Коментар до Вашого коментаря ("Не Python 3 ..."): Оскільки Ви перевіряєте >= 3, проблема щодо Python4 є недійсною.
Мартін Р.

@MartinR. вірніше, ..., >= 3замість цього мають бути примітки про Python 4 .
Джессі Чисхолм,

4

Припустимо, у вас є такі рядки коду

MyUrl = "www.google.com" #Your url goes here
urllib.urlretrieve(MyUrl)

Якщо ви отримуєте таке повідомлення про помилку

AttributeError: module 'urllib' has no attribute 'urlretrieve'

Тоді вам слід спробувати наступний код, щоб вирішити проблему:

import urllib.request
MyUrl = "www.google.com" #Your url goes here
urllib.request.urlretrieve(MyUrl)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.