Portál AbcLinuxu, 5. května 2025 13:56
G02X9Y6A5jak z toho vypárat 9, 6, 5 a uložit to do 3 proměnných zvlášť jako floaty?
X = radek.split("Y")[0] Y = radek.split("Y")[1] Z = radek.split("Y")[2]funguje jenom pro tento případ stringu G02X9Y6Y5. Jakmile je tam nějaký další oddělovač jako zrovna to A tak jsem řiti. Pokud použiju re.split tak ten mi zase vypíše jen list který mi nejde dál dělit, píše mi to, že list nemá atribut split.
with open("oblouky.txt") as f: for arc in f: if 'G02' in arc: radius = float(arc.split("A")[1]) souradnice = arc.split("A")[0] GX = souradnice.split("Y")[0] X = float(GX[4:]) Y = float(souradnice.split("Y")[1]) print(X, Y, radius)
Pokud použiju re.split tak ten mi zase vypíše jen list který mi nejde dál dělit, píše mi to, že list nemá atribut split.No tak v cyklu projeď položky toho listu ze splitu a ty pak splitni. Obávám se ale, že tvůj "parser" bude k ničemu s tímto přístupem k programování. Co to je za vstupní stringy? Nějaký CAD? Nebo G-CODE k CNC nebo 3D tisku?
import re inp_str = "G02X9Y6A5" (x, y, a) = re.split(r"[XYA]", inp_str[3:])[1:] print(f"x = {float(x)}, y = {float(y)}, a = {float(a)}") # x = 9.0, y = 6.0, a = 5.0
import re
sample = 'G02X9Y6A5'
# základ z regulárních výrazů:
# ^G02 = začátek bude G02
# X(?P<x>\d[.\d]*) = první část bude začínat X a následovat bude číslice a číslice nebo tečka a pojmenujeme to x
# Y(?P<y>\d[.\d]*) = viz předchozí, jen to začíná Y a jmenuje se to y
# A(?P<radius>\d[.\d]*) = viz přžedchozí, jen to začíná A a jmenuje se to radius
# $ = tím zkoumaný řetězec končí
# dalo by se to napsat obecněji, ale neznám formát dalších řetězců, které by třeba bylo rozebírat
r_g02 = re.compile(r'^G02X(?P<x>\d[.\d]*)Y(?P<y>\d[.\d]*)A(?P<radius>\d[.\d]*)$')
matched = r_g02.match(sample)
if matched:
x = float(matched.group('x'))
y = float(matched.group('y'))
radius = float(matched.group('radius'))
print(x, y , radius)
else:
print("Vstup není oblouk!")
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.