У меня есть ряд больших плоских текстовых файлов, которые мне нужно проанализировать, чтобы вставить в базу данных 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
Однако проблема, с которой я сталкиваюсь, заключается в том, что одна запись охватывает несколько фрагментов. Я упускаю из виду очевидный шаблон проектирования? Эта проблема может показаться несколько распространенной. Спасибо!