如何在Python中引用行中的某个位置

2024-04-19 09:06:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码:

g = open("spheretop1.stl", "r")
m = open("morelinestop1.gcode", "w")
searchlines = g.readlines()
file = ""
for i, line in enumerate(searchlines):
    if X1 in line and Y1 in line:
        m.write("start" + "\n")

X1='206.9799'和Y1='0.1218346'

此文件引用的行如下所示:

  facet normal 4.650354e-002 -9.989174e-001 -1.217645e-003
      outer loop
         vertex 2.069799e+002 1.218346e-001 2.000000e+002
         vertex 2.069756e+002 1.218346e-001 1.997564e+002
         vertex 2.139428e+002 4.871899e-001 1.995131e+002
      endloop
   endfacet

我基本上只希望文件在X1和Y1在同一行并且是该行的前两个变量时写入“start”+“\n”,如上面第3行所示。所以我要做的是在x位置的直线上找到X1(左17个空格),在y位置的直线上找到Y1(左31个空格)。希望它清楚:)


Tags: 文件代码inlineopenstart直线vertex
1条回答
网友
1楼 · 发布于 2024-04-19 09:06:37

我会用正则表达式。Live example。你知道吗

import re

X1 = 206.9799
Y1 = 0.1218346

for i, line in enumerate(lines):
    r = re.match(r'^\s*vertex (\d+\.\d+e[-+]\d+) (\d+\.\d+e[-+]\d+) \d+\.\d+e[-+]\d+\s*$', line)
    if r and X1 == float(r.group(1)) and Y1 == float(r.group(2)):
        m.write("start" + "\n") 

请注意,比较浮动可能是不精确的。你必须决定在比较价值时你愿意接受多少不精确性。可以使用这样的函数在一定精度内比较两个浮点值。你知道吗

def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
     return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)

相关问题 更多 >