您可以在split
上\n\n
,然后进行换行,
>>> l = []
>>> for block in f.read().strip().split('\n\n'):
... d = {}
... for line in block.split('\n'):
... if not line.strip():continue
... key,value = line.strip().split(':')
... d[key.strip()] = value.strip("' ") # strip the `'` and/or `space` at both ends in `value`
... l.append(d)
...
>>> import pprint
>>> pprint.pprint(l)
[{'company': 'Municipality','email': 'john@doe.com','name': 'John','surname': 'Doe'},{'company': 'Municipality2','email': 'john2@doe2.com','name': 'John2','surname': 'Doe2'},{'company': 'Municipality3','email': 'john3@doe3.com','name': 'John3','surname': 'Doe3'},{'company': 'Municipality4','email': 'john4@doe4.com','name': 'John4','surname': 'Doe4'}]
,
您可以执行以下操作:
def convert_text(txt):
dct = {}
for line in txt.splitlines():
if not line: # Blank line
yield dct
dct = {}
else:
key,value = line.split(': ',1)
dct[key] = value
yield dct
,
result = []
for each in data.split('\n\n'):
d = {}
for line in filter(None,each.split('\n')):
k,v = line.split(':')
d[k.strip()] = v.strip("' ")
result.append(d)
这将导致:
In [95]: result
Out[95]:
[{'name': 'John','surname': 'Doe','company': 'Municipality','email': 'john@doe.com'},{'name': 'John2','surname': 'Doe2','company': 'Municipality2','email': 'john2@doe2.com'},{'name': 'John3','surname': 'Doe3','company': 'Municipality3','email': 'john3@doe3.com'},{'name': 'John4','surname': 'Doe4','company': 'Municipality4','email': 'john4@doe4.com'}]
,
您可以尝试使用itertools.groupby
:
from itertools import groupby
with open('filename.txt','r') as f:
lines = [l.strip('\n') for l in f]
groups = groupby(lines,key=bool)
final_list = [{val.split(':')[0]:val.split(':')[1].strip("' ") for val in g} for k,g in groups if k]
最终列表:
[{'company': 'Municipality','surname': 'Doe4'}]
,
尝试一下
final_list = []
with open('file1.txt','r') as file:
_temp = {}
for line in file:
if line !='\n':
_temp.setdefault(line.split(':')[0].strip(),line.split(':')[1].replace('\n','').strip())
else:
final_list.append(_temp)
_temp = {}
print(final_list)
输出:
[{'company': "'Municipality'",'surname': "'Doe'"},{'company': "'Municipality2'",'surname': "'Doe2'"},{'company': "'Municipality3'",'surname': "'Doe3'"}]
,
使用正则表达式。
例如:
result = [{}]
with open(filename) as infile:
for line in infile: #Iterate each line
line = line.strip() #Check for empty line
if line:
key,value = re.match(r"(\w+):\s*'?(\w+)'?",line.strip()).groups() #Get key-value pair
result[-1][key] = value
else:
result.append({})
print(result)
输出:
[{'company': 'Municipality','email': 'john','email': 'john2','email': 'john3','email': 'john4','surname': 'Doe4'}]
本文链接:https://www.f2er.com/3112188.html