Проблема зацикливания файлов в каталоге при проверке базы данных с помощью Python - PullRequest
0 голосов
/ 22 апреля 2011

Я пытаюсь обработать кучу CSV-файлов в заданном каталоге.Каждый раз, когда я запускаю сценарий, он просматривает каждый файл в каталоге (в случае, если я добавил новые), а затем снова проверяет базу данных, чтобы увидеть, был ли файл обработан, и если да, то какую строку начать обработкуfrom.

Проблема в том, что скрипт, кажется, пропускает любой файл, который я перечислил в таблице базы данных, независимо от его состояния.Я уверен, что упускаю что-то очевидное, но не могу собрать воедино то, что мои тесты идут не так.

Вот структура таблицы:

file_processed_id | file_type | file_name | file_line | file_lines_processed | file_lines_skipped | file_status

Вот соответствующийcode:

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 Ответ

2 голосов
/ 22 апреля 2011

Судя по вашим комментариям, не должно быть оператора break в предложении else после file_to_be_processed = filename тоже?

Также обратите внимание, что эта переменная имеет неправильное название file_to_processed несколькими строками выше.

Также обратите внимание, что status[7], вероятно, вызовет исключение, поскольку в вашей таблице только 7 полей. Я предполагаю, что это должно быть status[6].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...