首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从G_code数据中提取x和y坐标

从G_code数据中提取x和y坐标
EN

Stack Overflow用户
提问于 2018-01-18 10:16:20
回答 1查看 38关注 0票数 0

我的守则:

代码语言:javascript
复制
import math
file1=open("g_code.nc","r")
for lines in file1:
    lineList=lines.split()
    if 'X' and 'Y' in lines:
        data=str(math.floor(float((lineList[1][1:]))))+" "+str(math.floor(float((lineList[2][1:]))))+"\n"
        file2=open('test.txt','r')
        lastline=file2.readlines()[-1]
        if data!=lastline:
            file2.close()
            file2=open("test.txt","a")
            file2.write(data)
            file2.close()
file1.close()        
file2.close()

有人能给出一个更好的主意来解决这个问题吗,

我想得到X和Y的值,不包括十进制值。

请注意,我不希望在连续的行中出现相同的值,但是对于它们来说,在很少不同的值之后出现是很好的。

输入文件包含表单中的数据:

代码语言:javascript
复制
G2 X-1.1269 Y-14.4111 I0.0267 J0.027 F60   
G2 X-1.1269 Y-14.4111 I0.3267 J0.267 F6  
G2 X-3.1269 Y-1.4111 I0.0467 J0.067 F50  
G2 X-1.1269 Y-14.4111 I0.067 J0.07 F70  

产出应是:

代码语言:javascript
复制
-1 -14  
-3 -1  
-1 -14  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 11:08:08

通常,您会使用正则表达式来查找号码。通常,您不会重新打开并关闭每个写操作的文件。类似的东西(未经测试):

代码语言:javascript
复制
import re
numbers = []

def append_if_different(x, y):
    if not numbers or (x, y) != numbers[-1]:
        numbers.append((x, y))

with open("g_code.nc","r") as inp:
    for line in inp:
        matches = re.findall(r'[XY]([-+]?\d+)', line)
        if len(matches) == 2:
            append_if_different(int(matches[0]), int(matches[1]))

with open("test.txt", "w") as outp:
    for xy in numbers:
        outp.write("{} {}\n".format(*xy))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48318815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档