首页 > 解决方案 > 将 txt 解析为块

问题描述

我有一个txt文件,其结构如下

start
id=1
date=21.05.2018
summ=500
end

start
id=7
date=23.05.2018
summ=500
owner=guest
end

我需要在字典列表中解析它(str:str(即使它是 int 类型或日期:将其转换为字符串))。即用 将其拆分为块start end,然后将其拆分为=符号。之间的行start end数可以不同。D 但a 无法意识到。我试过这样的事情:

d ={}
arr = []
ind = 0
for line in plines:
    ind = ind + 1
    if 'startpayment' in line:
        print('ind = ' + str(ind))
        for i in range(ind, len(plines)):
            print(i)
            key, value = plines[i].strip().split('=')
            if type(value) == 'str':
                d[key] = str(value)
            elif type(value) == 'int':
                 d[key] = int(value)
            arr.append(d)
            if 'endpayment' in line:
                break

有人可以帮助我吗?谢谢

标签: pythonparsingdictionary

解决方案


使用正则表达式

import re

with open(filename, "r") as infile:
    data = infile.read()
    data = re.findall("(?<=\\bstart\\b).*?(?=\\bend\\b)", data, flags=re.DOTALL)   #Find the required data from text

r = []
for i in data:
    val =  filter(None, i.split("\n"))
    d = {}
    for j in val:
        s = j.split("=")    #Split by "=" to form key-value pair
        d[s[0]] = s[1]
    r.append(d)             #Append to list
print(r)

输出:

[{'date': '21.05.2018', 'summ': '500', 'id': '1'}, {'date': '23.05.2018', 'owner': 'guest', 'summ': '500', 'id': '7'}]

推荐阅读