我试图在给定目录中处理一堆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
下面是检查db的函数:
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
我已经测试了db连接和所有内容,如果文件确实存在于表中,它将返回行信息。我不明白的是,为什么每次运行脚本时,无论"file_status"字段设置为什么,它都会跳转到下一个文件。
任何想法吗?
根据您的评论,file_to_be_processed = filename
之后的else
子句中不也应该有一个break
语句吗?
还要注意,这个变量在上面几行中被错误地命名为file_to_processed
。
还要注意status[7]
可能会抛出异常,因为表中似乎只有7个字段。我猜应该是status[6]
。