Как сделать так, чтобы модуль Python wget не загружал дубликаты?

1

При попытке загрузить файл из сообщения на 4chan (через BASC_py4chan) и загружая его через wget, wget загрузит файл, даже если я сделаю оператор if, говорящий, что он не загружает его, если имя файла совпадает с именем файла в текущем каталог? Является ли это проблемой wget-python или я совершил ошибку?

    if 'ylyl' in subject or 'YLYL' in subject:
    for post in thread.all_posts:
        if post.has_file:
            print(post.filename)
            for filename in os.listdir(cwd):
                print(filename)
                if filename != post.filename:
                    url = post.file_url
                    wget.download(url)
                    time.sleep(1.03)
Теги:
wget

2 ответа

0
Лучший ответ

Я вижу проблему с вашим кодом. Проблема в этом:

    for filename in os.listdir(cwd):
        print(filename)
        if filename != post.filename:
            url = post.file_url
            wget.download(url)
            time.sleep(1.03)

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

Поэтому скажем, что ваш код пытается загрузить файл3, а ваш каталог содержит файлы file1, file2 и file3.

С этими файлами в каталоге оператор if будет делать эти три проверки.

        if 'file1' != 'file3':
            url = post.file_url
            wget.download(url)
            time.sleep(1.03)

        if 'file2' != 'file3':
            url = post.file_url
            wget.download(url)
            time.sleep(1.03)

        if 'file3' != 'file3':
            url = post.file_url
            wget.download(url)
            time.sleep(1.03)

Вместо этого вы можете попробовать проверить, указано ли имя файла в списке, который возвращает os.listdir().

Вот мое решение:

if 'ylyl' in subject or 'YLYL' in subject:
for post in thread.all_posts:
    if post.has_file:
        print(post.filename)
        if post.filename not in os.listdir(cwd):
            url = post.file_url
            wget.download(url)
            time.sleep(1.03)
0

Я думаю, вы можете изменить свой код на

if 'ylyl' in subject or 'YLYL' in subject:
    for post in thread.all_posts:
        if post.has_file:
        print(post.filename)
        # changed at here
        if post.filename not in os.listdir(cwd):
            url = post.file_url
            wget.download(url)
            time.sleep(1.03)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню