Python 3 загрузка PDF-файлов с помощью urlretrive () и вложенных циклов - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь скачать .pdf, используя ссылки из файла xlsx с помощью urlretrieve (), в одном столбце есть ссылки, а в другом - имена, которые должны иметь загруженный файл.

Проблема в том, что мой код, кажется, просто перезаписывает один и тот же файл снова и снова, когда он загружает каждый элемент списка.

from urllib.request import urlretrieve
from urllib.error import URLError, HTTPError
import os
import xlrd

workbook = xlrd.open_workbook('file.xlsx',on_demand=True)
sheet = workbook.sheet_by_name('Sheet1')
listofvalues = sheet.col_values(21, 1)
listofnames = sheet.col_values(2, 1)

for name in listofnames:
    for value in listofvalues:
        try:
            results = 'C:\\results'
            full_file_name = os.path.join(results, str(name + ".pdf"))
            urlretrieve(value, full_file_name)
            print(str(value) + ' DOWNLOADED')
        except (HTTPError, ValueError, URLError) as e:
            print("------------------------------------")
            print(e)
            print(value)
            print("-----------------------------------")

    continue

Я думаю, что он как-то связан с вложеннымпетли, но я не могу найти решение.

1 Ответ

0 голосов
/ 21 мая 2018

Как уже упоминалось в комментарии, ваша проблема в том, что для каждой итерации вашего внешнего цикла ваш внутренний цикл будет выполняться до конца, поэтому вы будете называть все свои файлы одинаковыми.Вы хотите выполнить итерацию по обоим спискам одновременно, чтобы получить URL-адрес и имя для данного файла.

Для справки о том, как это сделать, вы можете обратиться к: Как выполнить итерациючерез два списка параллельно?

РЕДАКТИРОВАТЬ:

В приведенном выше ответе предполагается, что оба списка имеют одинаковую длину, т.е. у вас есть один URL на файл.Если это не так, обратитесь к комментариям, оставленным на ваш вопрос.

...