2014-02-18 2 views
1

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

zip_download.zip 
Set 1 
    2014 
    Feb 
    17th 
     Image_1.png 
     Image_2.png 
Set 2 
    2014 
    Feb 
    14th 
     Image_1.png 
     Image_2.png 

Example file path: zip_download.zip/set 1/2014/Feb/14th/Image_1.png 

Что мне нужно для Python, чтобы распаковать эти файлы ежедневно и в основном создать базу данных в окнах папок. Иногда могут быть данные за предыдущие дни, и эта папка может уже существовать, поэтому мне нужна эта обработка ошибок.

Вот то, что я до сих пор:

import zipfile 
import os 

target_location = r'C:/new_filestructure' 
file_download = r'C:/Users.Mike/Downloads/download1.zip' 

with zipfile.ZipFile(target_zip) as zip_file: 
    for member in zip_file.namelist(): 
     try: 
      os.makedirs(os.path.join(target_location + r'/' + os.path.dirname(member))) 
     except: 
      (OSSError, WindowsError) 
    print os.path.basename(member) 
    print os.path.dirname(member) 

Это будет прекрасно работать и печатать то, что я хочу (только тестирование, чтобы увидеть, если она проходит через все файлы), но это не будет создавать отдельную папку , Если я выберу try/except, я получу ошибку, заявив, что каталог уже существует, когда он явно этого не делает.

Любые идеи?

+0

os.path.join принимает аргументы папки разделенных запятой в качестве боковой заметки. Нет необходимости в + r '/' + и т. Д. – AER

ответ

2

Основная проблема в вашем коде заключалась в том, что вы вызывали бы ошибки, когда несколько файлов находились в одном каталоге. Например, каталог «Set 1/2014/Feb/17th» создается дважды: один раз для Image_1.png и снова для Image_2.png.

Вы также были странные вещи, где

file_download 

должен был

target_zip 

код я закончил с был:

import zipfile 
import os 

target_location = r'new_filestructure' 
target_zip = r'zip.zip' 

with zipfile.ZipFile(target_zip) as zip_file: 
    for member in zip_file.namelist(): 
     if os.path.exists(target_location + r'/' + member) or os.path.isfile(target_location + r'/' + member): 
      print 'Error: ', member, ' exists.' 
     else: 
      zip_file.extract(member, target_location) 
Смежные вопросы