2017-01-23 4 views
1
ID|Text 1|Date|Text2 
1|Hello There 
what a wonderful day|12th|Out in the market 
2|Well I wish|13th|Sleeping 
3|It is rocking, python 
is a great language 
to code|18th|what to do 
in this scenario 
4|Text issues|19th|Solving 

Поэтому у меня есть текст в формате выше, в котором я хочу читать каждую запись по строкам, однако есть проблема, что есть новые строки внутри запись, которая не заставляет меня перебирать, используя идиому 'for line in file:'. Моя проблема в том, что я должен прочитать все вышеупомянутые записи, запись времени.Чтение записи в файле, который разделен на несколько строк.

Пример записи из файла выше: «1, Привет Там какой замечательный день, 12-го, в рынке»

Я думал об использовании регулярных выражений здесь после прочтения всего файла в памяти. Так, например, наличие регулярного выражения, например (\d*|)(.*)(\d*|), позволит мне получить все между двумя идентификаторами, и это станет моей одной записью.

Проблема, с которой я столкнулся с вышеприведенным подходом, заключается в том, как мне нужно перейти к следующей записи и снова начать сопоставление?

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

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

Любое руководство будет оценено по достоинству.

+0

Насколько велик ваш файл? Вы можете прочитать весь файл и изменить свое регулярное выражение для соответствия полям с несколькими строками. –

+0

Мой файл невелик, он будет вписываться в память. –

+0

Это выглядит как неизолированные текстовые поля csv. Может ли символ трубы появляться в текстовых полях? – schwobaseggl

ответ

0

Старое школьное решение: используйте модуль csv, аккумулируя размер ряда &, пока размер не будет равен размеру заголовка.

import csv 

rows = [] 
prev_row = None 
with open("foo.csv") as f: 
    cr = csv.reader(f,delimiter='|') 
    title = next(cr) 
    rows.append(title) 
    for row in cr: 
     if prev_row: 
      prev_row[-1]+="\n"+row[0] 
      prev_row+=row[1:] 
     else: 
      prev_row = row 

     if len(prev_row)==len(title): 
      rows.append(prev_row) 
      prev_row = [] 

for row in rows: 
    print(row) 

строки печатаются как

['ID', 'Text 1', 'Date', 'Text2'] 
['1', 'Hello There\nwhat a wonderful day', '12th', 'Out in the market'] 
['2', 'Well I wish', '13th', 'Sleeping'] 
['3', 'It is rocking, python\nis a great language\nto code', '18th', 'what to do'] 
['in this scenario\n4', 'Text issues', '19th', 'Solving'] 
Смежные вопросы