Имам поредица от големи, плоски текстови файлове, които трябва да анализирам, за да вмъкна в SQL база данни. Всеки запис обхваща няколко реда и се състои от около сто полета с фиксирана дължина. Опитвам се да разбера как ефективно да ги анализирам, без да зареждам целия файл в паметта.
Всеки запис започва с цифра "1" като първи знак на нов ред (въпреки че не всеки ред, който започва с "1", е нов запис) и завършва много редове по-късно с поредица от 20 интервала. Докато всяко поле е с фиксирана ширина, всеки запис е с променлива дължина, защото може или не може да съдържа няколко незадължителни полета. Така че използвах "...20 spaces...\n1"
като разделител на запис.
Опитвам се да работя с нещо подобно, за да обработвам 1 kb наведнъж:
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
Проблемът, с който се сблъсквам обаче, е, когато един запис обхваща множество парчета. Пренебрегвам ли очевиден модел на дизайн? Този проблем изглежда често срещан. Благодаря!