Эффективно ли разбирать большой текстовый файл в Python? - PullRequest
1 голос
/ 15 ноября 2011

У меня есть серия больших плоских текстовых файлов, которые мне нужно проанализировать, чтобы вставить в базу данных SQL.Каждая запись занимает несколько строк и состоит из около ста полей фиксированной длины.Я пытаюсь выяснить, как эффективно анализировать их без загрузки всего файла в память.

Каждая запись начинается с цифры «1» в качестве первого символа в новой строке (хотя не каждая строка, которая начинается с«1» является новой записью) и завершает много строк позже серией из 20 пробелов.Хотя каждое поле имеет фиксированную ширину, каждая запись имеет переменную длину, поскольку она может содержать или не содержать несколько необязательных полей.Поэтому я использовал "...20 spaces...\n1" в качестве разделителя записей.

Я пытался работать с чем-то вроде этого, чтобы обрабатывать 1 КБ за раз:

def read_in_chunks(file_object, chunk_size):
    while True:
        data = file_object.read(chunk_size)
        if not data:
            break
        yield data

file = open('test.txt')
for piece in read_in_chunks(file, chunk_size=1024):
   # Do stuff

Однако,Проблема, с которой я сталкиваюсь, состоит в том, когда одна запись охватывает несколько фрагментов.Я пропускаю очевидный шаблон дизайна?Эта проблема может показаться довольно распространенной.Спасибо!

1 Ответ

3 голосов
/ 15 ноября 2011
def recordsFromFile(inputFile):
    record = ''
    terminator = ' ' * 20
    for line in inputFile:
        if line.startswith('1') and record.endswith(terminator):
            yield record
            record = ''
        record += line
    yield record

inputFile = open('test.txt')
for record in recordsFromFile(inputFile):
    # Do stuff

Кстати, file - встроенная функция.Это плохой стиль, чтобы изменить его значение.

...