Почему мой код делает дубликаты в zipfile - PullRequest
0 голосов
/ 25 февраля 2020

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

Часть namelist - моя последняя идея, чтобы решить эту проблему, но она все еще не работает.

import os, time, zipfile
from os.path import basename

path = 'c:\\Users\\laptop'



def find(type, archname):
    files = []
    # r=root, d=directories, f = files
    starttime = time.time()
    for r, d, f in os.walk(path):
        for file in f:
            if '.'+type in file:
                files.append(os.path.join(r, file))

    zipp=zipfile.ZipFile('c:\\Users\\laptop\\backup\\'+archname+'.zip', 'w')
    zipfiles=[]
    zipfiles=zipp.namelist()

    for f in files:
        file=basename(f)
        if file in zipfiles:
            print('Element skipped')
        else:
            zipp.write(f, basename(f))
    zipp.close()

    print('\nTime: ' + str(round(time.time() - starttime, 2)) + 's')
    print('Files found: ' + str(len(files)))
print('Enter type: ')
typ=input()
print('Enter zip name: ')
archname=input()
find(typ, archname)
print('Done.')

1 Ответ

0 голосов
/ 25 февраля 2020

Я уже пробовал код, думаю, проблема в том, что вы открываете его в режиме записи, поэтому zipp.namelist() возвращает пустую строку. Измените

zipp=zipfile.ZipFile('c:\\Users\\laptop\\backup\\'+archname+'.zip', 'w')

на

zipp=zipfile.ZipFile('c:\\Users\\comun\\Pictures\\'+archname+'.zip', 'a')

, и оно должно работать. Вы должны начать видеть «Элемент пропущен» в консоли. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...