2015-04-17 3 views
2

Этот код в настоящее время создает zip-файл в том же месте, где выполняется сценарий Python, и пытается заполнить почтовый индекс содержимым в «Documents and Settings \ Owner». Тем не менее, он пытается копировать через ntuser.dat и NTUSER.dat, который дает мне ошибку: [Errno 13] Permission denied: 'C:\\Documents and Settings\\Owner\\NTUSER.DAT'Python - Zipping directory

Как пропустить эти два файла, чтобы продолжить процесс zip? Я попытался определить, пытается ли файл ntuser копировать и просто передать ошибку, но не имеет никакого эффекта.

import os, zipfile, getpass 

try: 
    user= getpass.getuser() 
    zf = zipfile.ZipFile(user + ".zip", "w", zipfile.ZIP_DEFLATED) 
    directory = "C:\\Documents and Settings\Owner" 
    for dirname, subdirs, files in os.walk(directory): 
     zf.write(dirname) 
     for filename in files: 
      if "NTUSER" in filename: 
       pass 
      zf.write(os.path.join(dirname, filename)) 
except IOError as e: 
    print e 
    pass 
zf.close() 

ответ

3

Ваш код не делать ничего, когда вы найти соответствующий файл:

for filename in files: 
    if "NTUSER" in filename: 
     pass 
    zf.write(os.path.join(dirname, filename)) 

pass является не операция заявления. Python будет просто продолжать следующую строку, которая записывает файл в ZIP.

Если вы хотите, чтобы пропустить эти файлы, использовать continue вместо:

for filename in files: 
    if "NTUSER" in filename: 
     continue 
    zf.write(os.path.join(dirname, filename)) 

Это говорит Python, чтобы пропустить оставшуюся часть тела цикла и перейти к следующей итерации вместо этого, таким образом, пропуская zf.write() вызов.

Оператор pass полезен только в тех местах, где грамматика Python требует, чтобы существовала линия. Например, если вы хотите, чтобы игнорировать конкретное исключение вы бы написать:

try: 
    # code that can raise an exception 
except SpecificException: 
    pass 

, потому что вы должны написать что-то в except блоке; pass подходит для этого «что-то».

+0

Большое спасибо! Это все, что нужно! Однако теперь операция не заканчивается, и zip-файл больше не открывается. У вас есть идея, почему это произойдет сейчас? –

+0

Мои попытки открыть zip-папку теперь приводят к тому, что explorer.exe не отвечает. Разве я не даю процессу достаточно времени, чтобы закончить, или что-то не так? –