You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Slic3r生成的gcode中提取XYZEF坐标并实现各坐标同列对齐输出

解决方法

你当前代码的核心问题是仅按正则匹配到的顺序取值,没有按X/Y/Z/E/F的固定轴类型归类,不同行包含的轴种类不同自然无法按固定列对齐,按如下方式修改代码即可:

import re
# 预定义需要输出的轴顺序,固定列顺序
AXIS_ORDER = ['X', 'Y', 'Z', 'E', 'F']
# 每列固定输出宽度,可根据实际值长度调整
COL_WIDTH = 12

with open('novoteste.gcode') as gcode:
    # 先打印表头(可选)
    header = ''.join([axis.ljust(COL_WIDTH) for axis in AXIS_ORDER])
    print(header)
    print('-' * len(header))
    
    for line in gcode:
        line = line.strip()
        # 初始化当前行各轴值为空
        axis_val = {axis: '' for axis in AXIS_ORDER}
        # 正则匹配轴标签和对应数值,兼容负号、整数/小数格式
        matches = re.findall(r'([XYZEF])(-?\d+\.?\d*)', line)
        for axis, val in matches:
            axis_val[axis] = val
        # 按固定顺序、固定宽度输出
        output_line = ''.join([axis_val[axis].ljust(COL_WIDTH) for axis in AXIS_ORDER])
        if any(axis_val.values()): # 跳过没有坐标的空行
            print(output_line)

输出效果示例

X           Y           Z           E           F           
----------------------------------------------------------------
                        0.400                   7800.000    
                                    0                       
89.202      89.018                              7800.000    
                                    2.00000     2400.000    
90.699      87.561                  2.24810     1800.000    
92.235      86.138                  2.49678                
93.757      84.793                  2.73796                
95.322      83.475                  2.98105                
96.931      82.184                  3.22599                
98.583      80.924                  3.47273                

如果需要保留你原来的分隔符样式,只需要把输出部分的拼接逻辑替换为带分隔符的固定宽度格式即可:

# 带分隔符的输出写法
output_line = ' - '.join([axis_val[axis].ljust(10) for axis in AXIS_ORDER])

内容的提问来源于stack exchange,提问作者Antonio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:12:00