如何从文本文件中拆分并获取以冒号分隔的键值对

问题描述 投票:0回答:2

需要将文本文件中的以下内容用冒号分割,并存储为键值对。但如果同一行出现多次则不起作用。

Textfile.txt

        with open(textfile.txt, "r+") as myfile:

            for line in myfile:
                v = "\n".join([x.strip() for x in line.splitlines() if ": " in x])
                name, var = v.partition(": ")[::2]
                myvars[name.strip()] = var
                print (name , var)

输出应该是 Output

|名字约翰| |DoB 01-01-2000 | |性别 M | |美国国家| |加利福尼亚州| |专业工程师|

但是如果同一行中有多个对(带有:),则不能拆分

python string text key-value
2个回答
0
投票

这也许不是最漂亮的解决方案,但它确实有效。我强烈建议使用正则表达式来解决此类问题。 每条线应遵守以下规定:

  1. 首先找出该行有多少个冒号。
    obts = re.findall(r'([a-zA-Z]*)(: )', line)
  1. 如果有多个冒号,则进行处理。找到冒号前面的单词,然后将这些单词视为开始/结束标记,提取之间的所有内容(因此在您的示例中,Name 和 DoB 应被视为开始和结束,提取之间的所有内容 - 在示例中,它是 John 加上 all空格)。
    if len(obts) > 1:
        for o in range(0, len(obts)-1):
            getstr = re.findall(rf'{obts[o][0]}(.*){obts[o+1][0]}', strr)
            print(obts[o][0], getstr[0][1:].strip())
  1. 边缘情况(最后一个键值对)在 if 和循环之外处理。如果该行中只有一个冒号,则这对冒号将在这一步被捕获。
getstr = re.findall(rf'{obts[-1][0]}(.*)', strr)
print(obts[-1][0], getstr[0][1:].strip())

0
投票

初始化一个空字典来存储数据

数据字典={}

打开文件进行读取

以 open(f, 'r') 作为文件: # 使用列表理解来分割每一行并构建字典 data_dict = {fields[0]: fields[1].strip() for line in file if (fields := line.strip().split(':')) and len(fields) == 2}

打印生成的字典

打印(数据字典)

© www.soinside.com 2019 - 2024. All rights reserved.