为什么我的字典无法正确追加? Python

时间:2019-05-12 18:24:43

标签: python dictionary

我有一些试图解析信息的CNC代码。这些块是相当重复的,因此我认为将它们加载到字典中是有意义的,并通过该块中的关键字进行解析。作为示例,如下所示:

%
O4001(AARD0509280 REV-C 1-11-13) 
(SAVE 4001-S206) 
(BODY.187 EDUCTOR-SPEC)
(UPDATED 02-09-16) 

M91
M94002 

N1(SET UP)G0G18G40G97G99T0 
M60
M11
G4U.2
G300X[[#2708+#2008]-.06]Z1.T0800 
G150Z.438
M10
G4U.2
G0Z-.05
G28U0
M1 

N2(FACE) 
T2121
M3S3000P1
M8 
G99G0X.25Z0
G1X-.02F.001 
Z-.02F.01
G0Z-.05T0
G28U0
M1 

基本上,我想做的是每次想将NxNxx命中时添加到字典中的新键上。每个块始终以Nxx开始,并以M1结尾。

我尝试过的是这种变化:

# iterate thru files
for path, subdirs, files in os.walk(root + '\\'):
    for file in files:
        src = os.path.join(path, file)
        o = open(src, 'r') # , encoding='Latin-1'
        idx_name = 'Heading'
        for line in o.readlines():
            if line[0] == 'N':
                N = line.split('(')
                N = N[0]
                idx_name = N
            program_dict[idx_name] = line
        break
    break
print(program_dict)

在我看来,每行都应追加到字典的最新idx_name(键)后面,只有重命名才会弹出一个新的Nxx。这是输出的内容:

{
    "Heading": " \n",
    "N1": " \n",
    "N2": " \n",
    "N3": " \n",
    "N4": " \n",
    "N5": " \n",
    "N6": " \n",
    "N7": " \n",
    "N8 ": " \n",
    "N9": " \n",
    "N10 ": " \n",
    "N11": " \n",
    "N12": " \n",
    "N13": " \n",
    "N14 ": " \n",
    "N15 ": " \n",
    "N16": " \n",
    "N17": " \n",
    "N18": " \n",
    "N19": "%"
}

很显然,我在进行故障排除时很忙,所以应该没有那么多,但这是我期望字典使用的格式:

heading: %, O4001(AARD0509280 REV-C 1-11-13), (SAVE 4001-S206), (BODY.187 EDUCTOR-SPEC), (UPDATED 02-09-16), M91, M94002
N1: N1(SET UP)G0G18G40G97G99T0, G4U.2, G300X[[#2708+#2008]-.06]Z1.T0800, G150Z.438, M10, G4U.2,G0Z-.05, G28U0, M1 
N2: N2(FACE), T2121, M3S3000P1, M8, G99G0X.25Z0, G1X-.02F.001, Z-.02F.01, G0Z-.05T0, G28U0, M1 

我要去哪里错了?

1 个答案:

答案 0 :(得分:0)

您的问题似乎是,program_dict[idx_name] = line始终用ìdx_name的键替换line的值,因此该条目将始终只包含下一行之前的最后一行Nxx。要附加line,请使用+=。但是,如果该条目尚不存在,则会引发异常,这就是为什么您必须检查以下内容的原因:

if idx_name in program_dict:
    program_dict[idx_name] += line
else:
    program_dict[idx_name] = line

不幸的是,在简要查看字典类型的文档后,我还没有找到更优雅的解决方案。或者,您也可以在开始循环之前通过插入

来创建条目
program_dict[idx_name] = str()

之后,您可以安全地附加到它。

这应该可以解决您的问题。