使用Python循环遍历目录文件时检查数据库的问题
我正在尝试处理一个文件夹里的多个csv文件。每次我运行这个脚本时,它都会检查文件夹中的每一个文件(以防我添加了新的文件),然后再对照数据库查看这个文件是否已经处理过,如果处理过的话,就看看应该从哪一行开始处理。
问题是,这个脚本似乎会跳过我在数据库表中列出的任何文件,不管它的状态是什么。我确信我漏掉了什么明显的东西,但就是拼不起来我的测试哪里出错了。
这是表的结构:
file_processed_id | file_type | file_name | file_line | file_lines_processed | file_lines_skipped | file_status
这是相关的代码:
for filename in os.listdir(path):
status = check_process_status(filename,conn)
if status != None:
if status[7] == 'completed':
pass
else:
start_line = status[3]
file_to_processed = filename
break
else:
start_line = 0
file_to_be_processed = filename
这是检查数据库的函数:
def check_process_status(f,conn):
# retrieve process status of file
cursor = conn.cursor()
cursor.execute("""SELECT *
FROM files_processed
WHERE file_type = 'faca'
AND file_name = %s
""",(f,))
row = cursor.fetchone()
if row == None:
return None # if no entry, returns null
else:
return row # returns row information
我已经测试过数据库连接等一切,如果文件确实在表中,它会正确返回行信息。让我困惑的是,无论“file_status”字段设置成什么,每次运行脚本时,它都跳到下一个文件。
有什么想法吗?
1 个回答
2
根据你的评论,在 file_to_be_processed = filename
之后的 else
语句里,难道不应该加一个 break
语句吗?
另外要注意,这个变量的名字写错了,应该是 file_to_processed
,在前面几行就已经出现过。
还有,status[7]
可能会出错,因为你的表里似乎只有7个字段。我猜应该是 status[6]
。