使用Python循环遍历目录文件时检查数据库的问题

0 投票
1 回答
572 浏览
提问于 2025-04-16 16:14

我正在尝试处理一个文件夹里的多个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]

撰写回答