Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将CNC钻孔从旧系统转换为新系统(使用Python)_Python_Post Processing_Cnc - Fatal编程技术网

将CNC钻孔从旧系统转换为新系统(使用Python)

将CNC钻孔从旧系统转换为新系统(使用Python),python,post-processing,cnc,Python,Post Processing,Cnc,我有这样的文件(部分): 我想把它转换成一个新的编程系统。我要做的是首先读取标题(H),并将DX、DY和DZ值分别放入命名变量中。我设法做到了这一点,但当我开始处理我的XBO行(一个钻孔,我需要X,Y,Z,V,R,X,Y,D,N,F和;,也在单独的变量中)时,我的代码开始看起来非常难看非常快 所以我重新开始,提出了这个: f = open("input.xxl") # open input file for line in f: if Debug==1: print line

我有这样的文件(部分):

我想把它转换成一个新的编程系统。我要做的是首先读取标题(H),并将DX、DY和DZ值分别放入命名变量中。我设法做到了这一点,但当我开始处理我的XBO行(一个钻孔,我需要X,Y,Z,V,R,X,Y,D,N,F和;,也在单独的变量中)时,我的代码开始看起来非常难看非常快

所以我重新开始,提出了这个:

f = open("input.xxl") # open input file
for line in f:
    if Debug==1: print line
    for char in line:
        charbuffr=charbuffr+char
        if "H" in charbuffr:
            if Debug==1: print'HEADER found!'
            charbuffr=""           
        if "XBO" in charbuffr:
            if Debug==1: print'XBO found!'
            charbuffr=""       
这正确地识别了单独的命令H和XBO,但我现在有点卡住了。我可以使用相同的方法从H和XBO循环中提取所有变量,但这似乎不是很好的编码


有谁能帮我找到正确的方向吗?我不想要一个完整的解决方案,因为我喜欢编码(我的主要工作是为CNC机器编码,现在与Python相比似乎很容易),但我想知道哪种方法最好……

作为灵感,您可以这样做:

for raw_line in f:
    line = raw_line.split()
    if not line:
        continue
    if line[0] == 'H':
        header = {}
        for entry in line[1:4]:
            name, value = entry.split('=')
            header[name] = float(value)
    elif line[0] == 'XBO':
        xbo = {}
        for entry in line[1:11]:
            name, value = entry.split('=')
            try:
                xbo[name] = int(value)
            except ValueError:
                xbo[name] = value[1:-1] # stripping of the ""
现在
header
包含域的扩展:

{'DX': 615.0, 'DY': 425.0, 'DZ': 22.15}
xbo
其他值:

{'D': 10,
 'F': 1,
 'N': 'P',
 'R': 0,
 'V': 1000,
 'X': 100,
 'Y': 50,
 'Z': 5,
 'x': 0,
 'y': 0}
访问字典中的各个值:

>>> header['DX']
615.0

您可以使用
ast,而不是手动转换数据类型。文字评估
。此帮助函数采用
['a=2','b=“abc”]
格式的列表,并将其转换为字典
{'a':2',b':'abc'}

import ast

def dict_from_row(row):
    """Convert a list of strings in the form 'name=value' into a dict."""
    res = []
    for entry in row:
        name, value = entry.split('=')
        res.append('"{name}": {value}'.format(name=name, value=value))
    dict_string = '{{{}}}'.format(', '.join(res))
    return ast.literal_eval(dict_string)
现在解析文件变得更简单了:

for line in f:
    row = line.split()
    if not row:
        continue
    if row[0] == 'H':
        header = dict_from_row(row[1:4])
    elif line[0] == 'XBO':
        xbo = dict_from_row(row[1:11])
结果:

>>> header
{'DX': 615, 'DY': 425, 'DZ': 22.15}

>>> xbo
{'D': 10, 'F': 1, 'R': 0, 'V': 1000, 'X': 100, 'Y': 50, 'Z': 5, 'x': 0, 'y': 0}

使用字典而不是多个变量。查看
str.split()
dict()
、和
ast.literal\u eval()
。感谢大家给出的精彩答案!现在可以继续我的项目:)。如果它解决了你的问题,你可以给出一个答案。确定将必须先看看如何做:)。你的回答确实解决了这个问题,并且为这个程序打开了很多我一开始甚至没有想到的其他可能性……嗨,改变了这些:#header[name]=float(value)>header[name]=str(value)int(value)#xbo[name]=xbo[name]=str(value)也能够处理这样的行:'xbo X=DX-100'。你觉得有什么问题吗?这似乎是可行的,但太简单了,我想我的代码中会有一个陷阱,因为这个。。。谢谢
>>> header
{'DX': 615, 'DY': 425, 'DZ': 22.15}

>>> xbo
{'D': 10, 'F': 1, 'R': 0, 'V': 1000, 'X': 100, 'Y': 50, 'Z': 5, 'x': 0, 'y': 0}