Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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
Python 解析gcode文件以提取坐标_Python_Python 3.x_G Code - Fatal编程技术网

Python 解析gcode文件以提取坐标

Python 解析gcode文件以提取坐标,python,python-3.x,g-code,Python,Python 3.x,G Code,我有一个gcode文件,它是全文的,更具体地说是为机器协调的。我正试图读取文件,去掉无用的信息,这样我就可以在文件发送到机器之前对文件执行操作 到目前为止,我已经: file = open('TestCube.gcode','r') lines = file.readlines() file.close for line in lines: line = line.strip() 现在我有一个文件中所有行的列表,我应该如何获得相关的X和Y坐标 TestCube.gcode的示例:

我有一个gcode文件,它是全文的,更具体地说是为机器协调的。我正试图读取文件,去掉无用的信息,这样我就可以在文件发送到机器之前对文件执行操作

到目前为止,我已经:

file = open('TestCube.gcode','r')
lines = file.readlines()
file.close

for line in lines:
    line = line.strip() 
现在我有一个文件中所有行的列表,我应该如何获得相关的X和Y坐标

TestCube.gcode的示例:

;TYPE:SKIN
G1 F1200 X-9.914 Y-9.843 E3.36222
G0 F9000 X-9.843 Y-9.914
G1 F1200 X9.914 Y9.843 E3.65844
G0 F9000 X9.914 Y9.702
G1 F1200 X-9.702 Y-9.914 E3.95254
G0 F9000 X-9.560 Y-9.914
G1 F1200 X9.914 Y9.560 E4.24451
G0 F9000 X9.914 Y9.419
G1 F1200 X-9.419 Y-9.914 E4.53437
G0 F9000 X-9.277 Y-9.914
G1 F1200 X9.914 Y9.277 E4.82211
G0 F9000 X9.914 Y9.136
G1 F1200 X-9.136 Y-9.914 E5.10772
G0 F9000 X-8.995 Y-9.914
G1 F1200 X9.914 Y8.995 E5.39123
G0 F9000 X9.914 Y8.853
G1 F1200 X-8.853 Y-9.914 E5.67260
编辑:


正则表达式似乎做到了这一点:

import re

gcode = [
    ';TYPE:SKIN',
    'G1 F1200 X-9.914 Y-9.843 E3.36222',
    'G0 F9000 X-9.843 Y-9.914',
    'G1 F1200 X9.914 Y9.843 E3.65844',
    'G0 F9000 X9.914 Y9.702',
    'G1 F1200 X-9.702 Y-9.914 E3.95254',
    'G0 F9000 X-9.560 Y-9.914',
    'G1 F1200 X9.914 Y9.560 E4.24451',
    'G0 F9000 X9.914 Y9.419',
    'G1 F1200 X-9.419 Y-9.914 E4.53437',
    'G0 F9000 X-9.277 Y-9.914',
    'G1 F1200 X9.914 Y9.277 E4.82211',
    'G0 F9000 X9.914 Y9.136',
    'G1 F1200 X-9.136 Y-9.914 E5.10772',
    'G0 F9000 X-8.995 Y-9.914',
    'G1 F1200 X9.914 Y8.995 E5.39123',
    'G0 F9000 X9.914 Y8.853',
    'G1 F1200 X-8.853 Y-9.914 E5.67260'
    ]

for line in gcode:
    coord = re.findall(r'[XY]-\d.\d\d\d', line)
    if coord:
        print("{} - {}".format(coord[0], coord[1]))
结果:

X-9.914 - Y-9.843
X-9.843 - Y-9.914
X-9.702 - Y-9.914
X-9.560 - Y-9.914
X-9.419 - Y-9.914
X-9.277 - Y-9.914
X-9.136 - Y-9.914
X-8.995 - Y-9.914
X-8.853 - Y-9.914
编辑:

请尝试以下方法。我已将您的代码与我提供的示例集成,并进行了一些调整:

import re

with open('PI_25mm_cube.gcode') as gcode:
    for line in gcode:
        line = line.strip()
        coord = re.findall(r'[XY].?\d+.\d+', line)
        if coord:
            print("{} - {}".format(coord[0], coord[1]))
通过将
open
替换为
with
,它可以防止您忘记关闭文件,并降低造成内存问题的风险,据我所知


由于不清楚您的代码是否将用于其他gcode文件,我的初始正则表达式可能不适合。我使用创建了一个gcode文件并查看了提供的坐标。基于此信息,您可能会发现模式
'[XY].?\d+。\d+'
更有用。是测试这些的好网站

谢谢。有没有办法将一个x和y集存储在两个变量中,将它们用于某些函数,然后让它读取下一个xy值并覆盖旧值?当然!将坐标[0]和坐标[1]分配给变量。例如,x_coord=coord[0],然后简单地返回它们以传递给函数。当上面的代码逐行迭代时,前面的X和y值将被替换。
import re

with open('PI_25mm_cube.gcode') as gcode:
    for line in gcode:
        line = line.strip()
        coord = re.findall(r'[XY].?\d+.\d+', line)
        if coord:
            print("{} - {}".format(coord[0], coord[1]))