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

时间:2011-04-22 15:28:14

标签: python mysql file

我正在尝试处理给定目录中的一堆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”字段设置为什么,每次运行脚本时它都会跳到下一个文件。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

根据您的评论,break之后的else子句中不应该有file_to_be_processed = filename声明吗?

另请注意,此变量在上面的几行中被错误命名为file_to_processed

另请注意,status[7]可能会抛出异常,因为您的表中似乎只有7个字段。我猜它应该是status[6]