【问题标题】:taking input from a txt file and putting inside a Dictionary从 txt 文件中获取输入并放入 Dictionary
【发布时间】:2021-11-08 16:52:59
【问题描述】:

我正在使用 python 来解析一个 txt 文件。我的文本文件如下所示:

下面的文字:

主机:000000 从机:000001 000002
主机:000003 从机:000004 000005
主机:000006 从机:000007 000008
主机:000010 从机:
主机:000012 从机:
主机:000014 从机:
主机:000016 从机:000017 000018
主机:000020 从机:000021 000022
主机:000024 从机:000025 000026
主机:000028 从机:000029 000030
主机:000032 从机:000033 000034
主机:000036 从机:000037 000038

我希望将所有这些值都放在一个字典中,其中 master 作为键,slave 作为值。

{master1:[slave1,slave2],master2:[slave1,slave2]}

键值

00000 00001 , 00002

00003 00004 , 00005...

我是 python 新手。请帮忙。 谢谢

【问题讨论】:

  • 我看到Slaves 有多个值,你想如何存储这些值?还请提供文本格式的数据,以便我们可以简单地复制并用于测试,还请提供您的尝试和预期输出的minimal reproducible example
  • 您好,我也添加了文本。感谢您指出了这一点。对于您的问题-从属可以是键,因为它们是唯一的,然后值可以是主控。
  • Slave 没有(明显)值的行呢?
  • 我们可以简单地忽略这些而不添加它们。
  • 我明白,但您应该以最有意义的格式创建数据(在使用和可读性/理解方面),所以也许您想将奴隶存储在列表中?像dct = {master1: [slave1, slave2], master2: [slave1, slave2]}这样的东西(slave1slave2显然是对应的值)?

标签: python dictionary parsing parse-tree


【解决方案1】:

您可以使用re 模块和正则表达式来查找具有模式的主从值,然后简单地从模式中获取组并将它们相应地添加到字典中:

import re

pattern = re.compile(r'Master : (.*) Slave : (.*)')

file_name = 'myfile.txt'
dct = {}
with open(file_name, 'r') as file:
    for line in file:
        match = pattern.match(line.strip())
        if match:
            master, slave = match.groups()
            dct[master] = slave.split()

print(dct)

输出:

{'000000': ['000001', '000002'],
 '000003': ['000004', '000005'],
 '000006': ['000007', '000008'],
 '000016': ['000017', '000018'],
 '000020': ['000021', '000022'],
 '000024': ['000025', '000026'],
 '000028': ['000029', '000030'],
 '000032': ['000033', '000034'],
 '000036': ['000037', '000038']}

有用:

【讨论】:

  • 对我来说它会打印一个像这样的空字典:{ }
  • @user5440565 首先,您是否阅读了正确的文件,其次,您的文件是否与您在问题中以文本格式提供的文件完全相同?例如,如果您从问题中复制粘贴假定的文件内容,将它们放入一个文件并用这个读取该文件,会发生什么?
  • 您提供的答案是绝对正确的。我必须找出我的代码中是否缺少某些东西。我会尽快回复您。
【解决方案2】:

这将是我的解决方案

dictionary = {}
with open('text.txt', 'r') as file:
    for line in file:
        slaves = line.split('Slave :')[1].strip()
        master = line.split('Slave :')[0].split('Master : ')[1].strip()
        list_of_slaves = slaves.split()
        dictionary[master] = list_of_slaves

结果是这个

{'000000': ['000001', '000002'],
'000003': ['000004', '000005'],
'000006': ['000007', '000008'],
'000010': [],
'000012': [],
'000014': [],
'000016': ['000017', '000018'],
'000020': ['000021', '000022'],
'000024': ['000025', '000026'],
'000028': ['000029', '000030'],
'000032': ['000033', '000034'],
'000036': ['000037', '000038']}

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多