2011-10-23 145 views
1

只寫了我的第一個python程序!我將zip文件作爲郵件附件保存在本地文件夾中。該程序檢查是否有新文件,如果有一個文件解壓縮zip文件,並根據文件名提取到不同的文件夾。當我運行我的代碼時,出現以下錯誤:「'NoneType'對象不可迭代」錯誤

Traceback(最近調用最後一次):文件「C:/Zip/zipauto.py」,第28行,用於new_files中的文件:TypeError:'NoneType'object是不可迭代的

任何人都可以請告訴我我哪裏錯了。

非常感謝您的時間,

納文 這裏是我的代碼:

import zipfile 
import os 

ROOT_DIR = 'C://Zip//Zipped//' 
destinationPath1 = "C://Zip//Extracted1//" 
destinationPath2 = "C://Zip//Extracted2//" 

def check_for_new_files(path=ROOT_DIR): 

    new_files=[] 
    for file in os.listdir(path): 
     print "New file found ... ", file 

def process_file(file): 

    sourceZip = zipfile.ZipFile(file, 'r') 
    for filename in sourceZip.namelist(): 
      if filename.startswith("xx") and filename.endswith(".csv"): 
        sourceZip.extract(filename, destinationPath1) 
      elif filename.startswith("yy") and filename.endswith(".csv"): 
        sourceZip.extract(filename, destinationPath2) 
        sourceZip.close() 

if __name__=="__main__": 
    while True: 
      new_files=check_for_new_files(ROOT_DIR) 
      for file in new_files: # fails here 
        print "Unzipping files ... ", file 
        process_file(ROOT_DIR+"/"+file) 

回答

6

check_for_new_files沒有return statement,因此隱含返回無。因此,

new_files=check_for_new_files(ROOT_DIR) 

套new_files到None,你不能在None迭代。

返回check_for_new_files讀文件:

def check_for_new_files(path=ROOT_DIR): 
    new_files = os.listdir(path) 
    for file in new_files: 
     print "New file found ... ", file 
    return new_files 
+0

aha..that解決它..非常感謝你 – Navin

1

這裏的答案是你的下2個問題:

(1)while True::你的代碼將永遠循環。 (2)您的功能check_for_new_files不檢查新文件,它檢查任何文件。您需要將每個傳入文件在處理完成後移動到存檔目錄,或者使用某種時間戳機制。

+0

yes..i使用shutil模塊將傳入文件移動到另一個目錄後處理 – Navin

相關問題