Как сделать так, чтобы модуль Python wget не загружал дубликаты? - PullRequest
0 голосов
/ 31 августа 2018

При попытке загрузить файл из поста на 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)

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

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

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

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

Допустим, ваш код пытается загрузить файл3, а в вашем каталоге есть файлы1, файл2 и файл3.

С этими файлами в каталоге ваш оператор if выполнит эти 3 проверки.

        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 голосов
/ 31 августа 2018

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

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)
...