#python #re #g-code
Вопрос:
У меня есть файл под названием test.gcode
. Этот файл содержит следующие данные:
N100(ROUGH FACE/OD - CNGP-432HP KC5410 )
G00G20G40G54G99X10.0Z10.0T0000
G00T0101
G50S2200
G97S1400M03P11
G96S1200
G00X3.8(X3.7)Z.2M8
Z.03
G1Z.005F.020
X-.07F.01
G00Z.1
G00X3.523
Z.03
G1Z-2.F.015
X3.8(X3.763)
G00Z.2
M9
G00G40X10.0Z10.0T0000
M01
N200(CUTOFF - .118 WIDE TAG N3A IC20 )
G00G20G40G54G99X10.0Z10.0T0000
G00T0303
G97S429M03
G96S400
G00X3.563Z.2M8
Z-.173
G1X3.335F.0025
G00X3.563
Z-.211
G1X3.335
G00X3.563
G50S1800
Вы заметите, что каждый «блок» кода разделен разрывом строки и обозначен 'N Code'
(мое описание) в первой строке каждого «блока». Итак, для этого примера у нас есть два «блока»: N100
и N200
.
В каждом «блоке кода» есть строка, содержащая «T», a 'T Code'
(мое описание), которая НЕ РАВНА T0000.
В этом примере 'T Code'
для N100
блока «T0101», а 'T Code'
для N200
блока «T0303»
Я хотел бы прочитать этот файл и вывести текстовый файл, содержащий следующее:
N100:T0101
N200:T0303
До сих пор у меня есть следующее:
import re
pattern = re.compile("^N")
for line in open("test.gcode"):
for match in re.finditer(pattern, line):
print(line)
Я озадачен тем, как найти соответствующее значение T для каждого блока и записать его в файл.
Любая помощь будет очень признательна!
Ответ №1:
Вы можете сделать это без re
разделения данных на новые строки. Обратите внимание, что в этом ответе предполагается, что в каждой строке есть конечный пробел, как в вашем примере.
with open("test.gcode", "r") as data:
items = [i.split("n")for i in data.split("n n")]
itemlist = [i[0].split("(")[0] ':' i[2][3:].strip() for i in items]
with open("outfile.txt", "w") as outfile:
outfile.write("n".join(itemlist))