刚写了我的第一个python程序!我在邮件中将zip文件作为附件保存在本地文件夹中。该程序检查是否有任何新文件,如果有的话,它会提取zip文件,并根据文件名提取到不同的文件夹。当我运行我的代码时,我收到以下错误:
回溯(最近一次调用最后一次):文件“C:/Zip/zipauto.py”,第28行,用于new_files中的文件:TypeError:'NoneType'对象不可迭代
任何人都可以告诉我哪里出错了。
非常感谢你的时间,
纳文 这是我的代码:
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)
答案 0 :(得分:7)
check_for_new_files
没有return
statement,因此隐含地返回None。因此,
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
答案 1 :(得分:1)
以下是您的NEXT 2问题的答案:
(1)while True:
:你的代码将永远循环。
(2)您的函数check_for_new_files
不会检查新文件,它会检查任何文件。您需要在处理后将每个传入文件移动到存档目录,或使用某种时间戳机制。
答案 2 :(得分:0)
例如,student_grade = dict(zip(names, grades))
确保名称和等级是列表,并且都具有至少一个以上的要迭代的项目。这对我有帮助