读取多行分割的文件中的记录

时间:2017-01-23 13:07:20

标签: python regex file-io

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在档案中:'成语。我的问题是我必须阅读以上所有记录,记录一次。

来自上述文件的记录示例:" 1,你好,那是多么美好的一天,12日,在市场上出局"

我正在考虑在读取内存中的所有文件后使用正则表达式。例如,拥有像(\d*|)(.*)(\d*|)这样的正则表达式将允许我获取2个ID之间的所有内容,这将成为我的一条记录。

我对上述方法的问题是,我如何进入下一条记录并再次开始匹配?

我无法想到上面的模式可以帮助我解决问题。重申我不能逐行阅读,因为记录本身的行用新行分割。

说明问题的另一种方法是如何格式化文件,以便为每条记录删除新行,并逐行格式化每条记录。

任何指导都将不胜感激。

1 个答案:

答案 0 :(得分: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']