2016-11-21 3 views
0

Я пытаюсь рекурсивно перечислить все файлы внутри папки (включая подпапки) и распаковать zip-файлы. Tha'ts, как я это делаю:Рекурсивно перечислять файлы в папке и распаковывать zip-файлы

def scan(real_path): 
    matches = [] 
    for root, dirnames, filenames in walk(real_path): 
     for filename in fil(filenames, '*'): 
      matches.append(path.join(root, filename)) 
    return matches 


def unzip(destination, path): 
    z = ZipFile(path, mode = "r") 
    for archive in z.namelist(): 
     content = z.read(archive) 
     archive = open("%s/%s" % (destination, archive), "w") 
     archive.write(content) 
     z.close() 


def startup_files(starting_over = False): 
    print "STARTING FILES AGAIN..." if starting_over else \ 
      "STARTING FILES..." 

    x = scan(folder) 
    print "Files found in folder:" 
    print x 
    for archive in x: 
     archive = Archive.details(archive) 
     print "READING:", archive.full_path 
     if archive.extension == ".ZIP": 
      unpack_zip(archive) 
      remove(archive.full_path) 
      startup_files(True) 

Это вызывает эту странную ошибку. Я тестирую сценарий с 2 ​​файлами, 1.zip и 2.ZIP, в какой файл у меня есть этот файл: SFPDB001.GBK

Выход есть:

Итерация один: хорошо

STARTING FILES... 
Files found in folder: 
['arp\\_input\\backups\\1.zip', 'arp\\_input\\backups\\2.ZIP'] 
READING: C:\Users\G1745 IRON\Development\LL\ARP\arp\_input\backups\1.zip 

Итерация два: хорошо

STARTING FILES AGAIN... 
Files found in folder: 
['arp\\_input\\backups\\2.ZIP', 'arp\\_input\\backups\\SFPDB001.GBK'] 
READING: C:\Users\G1745 IRON\Development\LL\ARP\arp\_input\backups\2.ZIP 

итерация три: ОШИБКА: функция сканирования поиска нужных файлов внутри папки, но итерация пытается т o удалять недоступные файлы.

STARTING FILES AGAIN... 
Files found in folder: 
['arp\\_input\\backups\\SFPDB001.GBK'] 
READING: C:\Users\G1745 IRON\Development\LL\ARP\arp\_input\backups\SFPDB001.GBK 
READING: C:\Users\G1745 IRON\Development\LL\ARP\arp\_input\backups\SFPDB001.GBK 
READING: C:\Users\G1745 IRON\Development\LL\ARP\arp\_input\backups\2.ZIP 

C:\Users\G1745 IRON\Development\LL\ARP\arp\_input\backups\2.ZIP 

Traceback (most recent call last): 
    File "arp\__main__.py", line 22, in <module> 
    main() 
    File "arp\__main__.py", line 18, in main 
    ARP(p.parse_args()).run() 
    File "C:\Users\G1745 IRON\Development\LL\ARP\arp\arp.py", line 26, in run 
    self.startup_files() 
    File "C:\Users\G1745 IRON\Development\LL\ARP\arp\arp.py", line 46, in startup_files 
    self.unpack_zip(archive) 
    File "C:\Users\G1745 IRON\Development\LL\ARP\arp\arp.py", line 62, in unpack_zip 
    Zip.unzip(self.folder, archive.full_path) 
    File "C:\Users\G1745 IRON\Development\LL\ARP\arp\zip.py", line 17, in unzip 
    z = ZipFile(path, mode = "r") 
    File "C:\Python25\lib\zipfile.py", line 339, in __init__ 
    self.fp = open(file, modeDict[mode]) 
IOError: [Errno 2] No such file or directory: 'C:\\Users\\G1745 IRON\\Development\\LL\\ARP\\arp\\_input\\backups\\2.ZIP' 

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

OBS: Я использую Python v2.5, потому что его устаревший код.

+0

Ну, ошибка не оставляет нам много возможностей ... Файл 'C: \\ Пользователи \\ G1745 IRON \\ Разработка \\ LL \\ ARP \\ arp \\ _ input \\ backups \\ 2. ZIP', похоже, вообще не существует. Может быть, это написано неправильно? – lucasnadalutti

+0

Кстати, ошибка не в итерации 3, как вы сказали ... Она все еще находится на итерации 2. – lucasnadalutti

+0

Файл существует, когда программа запускается, но он удаляется на второй итерации. Вторая итерация - это повторение файлов, которые не находятся в массиве отсканированных файлов ... действительно причудливо. –

ответ

0

Я нашел ошибку, я должен вернуть startup_files, когда я называю его от зацикливания:

return self.startup_files(True) 

Вот и все.

Смежные вопросы