将txt文本块转换为列表字典的Python代码

2024-10-01 07:47:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个通用的txt

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

用空行分隔每个。将文件转换为字典列表的最佳方法是什么?每本字典都是一个人的。你知道吗


Tags: nametxtcom字典emailsurnamejohncompany
3条回答

你可以在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'}]

相关问题 更多 >