как я могу загрузить несколько файлов с веб-адресом, найденным в локальном файле .txt - PullRequest
0 голосов
/ 05 мая 2020
import wget
with open('downloadhlt.txt') as file:
    urls = file.read()
    for line in urls.split('\n'):
        wget.download(line, 'localfolder')

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

http://halitereplaybucket.s3.amazonaws.com/1475594084-2235734685.hlt
http://halitereplaybucket.s3.amazonaws.com/1475594100-2251426701.hlt
http://halitereplaybucket.s3.amazonaws.com/1475594119-2270812773.hlt

Я хочу захватить каждую строку и запросить ее, чтобы она загружалась группой больше 10. В настоящее время то, что у меня есть, и он загружает по одному элементу за раз, это очень трудоемко.

Я попытался посмотреть Способы чтения / редактирования нескольких строк в python, но итерация, похоже, предназначена для редактирования, а моя - для нескольких запусков wget.

У меня есть Я не пробовал другие методы просто потому, что впервые мне нужно было сделать более 2 миллионов вызовов загрузки.

1 Ответ

1 голос
/ 05 мая 2020

Это должно работать нормально, я новичок ie, поэтому я не могу посоветовать вам количество потоков для запуска lol. В любом случае, это мои 2 цента, надеюсь, это как-то поможет.

Я пробовал синхронизировать ваши и мои более 27 загрузок:

(base) MBPdiFrancesco:stack francesco$ python3 old.py
Elapsed Time: 14.542160034179688
(base) MBPdiFrancesco:stack francesco$ python3 new.py
Elapsed Time: 1.9618661403656006

И вот код, вы должны создать "загрузок" "папка

import wget
from multiprocessing.pool import ThreadPool
from time import time as timer


s = timer()
thread_num = 8


def download(url):
    try:
        wget.download(url, 'downloads/')
    except Exception as e:
        print(e)


if __name__ == "__main__":
    with open('downloadhlt.txt') as file:
        urls = file.read().split("\n")
    results = ThreadPool(8).imap_unordered(download, urls)
    c = 0
    for i in results:
        c += 1
        print("Downloaded {} file{} so far".format(c, "" if c == 1 else "s"))


print("Elapsed Time: {} seconds\nDownloaded {} files".format(timer() - s, c))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...