2015-04-17 273 views
2

此代碼當前在執行Python腳本的同一目標位置創建一個zip文件,並嘗試使用「Documents and Settings \ Owner」上的內容填充壓縮文件。但是,它一直試圖通過ntuser.dat和NTUSER.dat進行復制,這給了我一個錯誤:[Errno 13] Permission denied: 'C:\\Documents and Settings\\Owner\\NTUSER.DAT'Python - 壓縮目錄

如何跳過這兩個文件以允許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()電話。

A pass語句僅在Python語法需要的地方有一行。例如,如果你想忽略一個特定的異常,你會寫:

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

,因爲你必須寫東西except塊; pass很適合這個'東西'。

+0

非常感謝!這就是所需要的! 但是,現在該操作似乎沒有結束,並且zip文件不再打開。你有什麼想法,爲什麼現在會發生? –

+0

我嘗試打開zip文件夾現在導致explorer.exe沒有響應。我是否沒有給過程足夠的時間來完成,或者是錯的? –