2016-03-31 2 views
-1

У меня есть этот маленький кусочек кода:Как сослаться на определенное место в строке в 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 находятся в одной и той же линии, и первые две переменные в этой линии, как и в 3-я строка выше. Так что я хочу найти X1 в строке в позиции x (17 пробелов слева) и Y1 в строке в позиции y (31 пробел слева). Надеюсь, что его ясно :)

ответ

0

Я бы использовал регулярные выражения. 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) 
+0

Числа X1 = 2.069799e + 002 и Y1 = 1.218346e-001 являются числами из файла х, когда эти числа встречаются в строке из файла у в этой позиции, я хочу, чтобы мой сценарий, чтобы написать «начать» + «\ n». – Henry

+0

Это 'X1 = 2.069799e + 002', или это' X1 = '2.069799'', как у вас есть в вашем вопросе? У вас также нет упоминания файла x в вашем вопросе. –

+0

Число из файла x на самом деле 206.9799, но я хочу преобразовать его в 2.069799e + 002 (так как это то же самое), и вот как его отметили в файле y (файл stl) – Henry

Смежные вопросы