Portál AbcLinuxu, 5. května 2025 13:56

Dotaz: split() a proměnné - Python

pdp7 avatar 21.3. 17:55 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
split() a proměnné - Python
Přečteno: 576×
Odpovědět | Admin
Ahoj mám string:
G02X9Y6A5
jak 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.
"První" komunita sdílející software
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

pdp7 avatar 21.3. 20:44 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: split() a proměnné - Python
Odpovědět | | Sbalit | Link | Blokovat | Admin
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)
"První" komunita sdílející software
21.3. 21:01 Bugsa
Rozbalit Rozbalit vše Re: split() a proměnné - Python
Odpovědět | | Sbalit | Link | Blokovat | Admin
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?
pdp7 avatar 21.3. 21:17 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: split() a proměnné - Python
No nepochybně ten přístup je uplně jeblý (nejsem zrovna programátor). Zatím mám funkční parser který čte excellon a převádí na gcode (protože nemám přístup k industriálním strojům k obrábění plošných spojů), mám přístup jen k normální bězné fréze. Ovšem soft kde se dá panelizovat DPS tvořit cesty nástrojem atd. obyčejně zas generuje jenom ten excellon a jak ho mám na té obyč fréze pustit, když ona tomu nehoví. Za tím účelem jsem si napsal takový prasecký parser který funguje. Zatím jen s G00 a G01 příkazy. Nějak to rozšiřuji chci tam přidat podporu pro G02, G03 (oblouky) který tam dopočítává offsety I, J protože ta fréza to vyžaduje. V excellonu se zas definuje jen poloměr oblouku a moje prasečina to tam dopočítává :D
22.3. 13:54 mikrom
Rozbalit Rozbalit vše Re: split() a proměnné - Python
Odpovědět | | Sbalit | Link | Blokovat | Admin
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
23.3. 17:11 Ja
Rozbalit Rozbalit vše Re: split() a proměnné - Python
Odpovědět | | Sbalit | Link | Blokovat | Admin
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!")

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.