代码之家  ›  专栏  ›  技术社区  ›  Chris Macaluso

为什么我的字典没有正确的附加?蟒蛇

  •  0
  • Chris Macaluso  · 技术社区  · 7 年前

    %
    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 
    

    Nx Nxx 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 回复  |  直到 7 年前
        1
  •  0
  •   henriman    7 年前

    看来你的问题是 program_dict[idx_name] = line ìdx_name 具有 line ,以便该条目始终只包含下一行之前的最后一行 Nxx 线 ,使用 += . 但是,如果条目尚不存在,则会引发异常,这就是为什么您必须检查此项的原因:

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

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

    program_dict[idx_name] = str()
    

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

    这会解决你的问题。