Найдите в файле .gcode строку, начинающуюся с определенных букв

#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))