Seite 1 von 1
Y Koordinaten in einer Datei multiplizieren
Verfasst: Sonntag 22. Februar 2026, 13:40
von Zwaehn
Hallo Leute,
Ich möchte in einer CNC Datei mit vielen X und Y Koordinaten alle Y Koordinaten mit einem bestimmen Faktor multiplizieren.
Jetzt bin ich neu was Phyton angeht Anfänger und habe ein bisschen rumgespielt. Es ist mir aber einfach zu kompliziert.
Meine erste Frage, geht das überhaupt?
Es soll dann abgefragt werden mit was für einem Faktor multipliziert werden soll und eine neue Datei mit den anderen Werten gespeichert werden.
Hier ein kleiner Auszug von so einer Datei:
T1 D1
S10000 M3
M8
N4 G0 X17.354 Y17.354 Z5.000
N5 X17.354 Y17.354 Z0.500
N6 G1 Z-3.000 F300
N7 X19.027 F600
N8 X19.007 Y17.418
N9 X19.004 Y17.428
N10 X18.958 Y17.583
N11 X18.950 Y17.590
N12 X18.932 Y17.604
N13 X18.899 Y17.629
N14 X18.882 Y17.642
N15 X18.848 Y17.667
N16 X18.831 Y17.681
N17 X18.798 Y17.706
N18 X18.780 Y17.720
N19 X18.747 Y17.745
N20 X18.730 Y17.758
N21 G0 Z30
N22 M17
Ich hoffe das man ungefähr versteht was ich will und hoffe das mir jemand weiterhelfen kann.
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Montag 23. Februar 2026, 12:31
von Kebap
Zwaehn hat geschrieben: Sonntag 22. Februar 2026, 13:40
Meine erste Frage, geht das überhaupt?
Ja, das geht.
Zeig doch mal deinen besten Versuch, dann kann man dir vielleicht besser helfen.
Oder mal anders gefragt: Möchtest du Python lernen oder ein fertiges Programm kaufen?
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Montag 23. Februar 2026, 13:21
von Sirius3
@Zwaehn: ein komplexes Problem teilt man in einfachere Teilprobleme. Bei Dir also 1. Einlesen der Daten, 2. Multiplizieren der Y-Werte, 3. Rausschreiben der Daten.
Falls das ein bekanntes Datenformat ist, gibt es vielleicht schon für 1. und 3. eine passende Bibliothek. Ansonsten mußt Du das auch selbst schreiben.
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Montag 23. Februar 2026, 13:40
von __blackjack__
Sieht ein bisschen nach G-Code aus. Siehe zum Beispiel:
https://reprap.org/wiki/G-code#Introduction
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Montag 23. Februar 2026, 19:45
von Zwaehn
Hallo an alle,
Danke erstmal für eure schnellen Antworten.
Ich möchte ein kleines Programm schreiben und versuche mich nach und nach schlau zu lesen und es umzusetzen. Kaufen will ich es nicht.
Mein erstes Problem ist es eine einzelne Zeile zu lesen. Mal davon abgesehen das ich diese noch verarbeiten und schreiben möchte.
Ich habe mir einige Videos angeguckt, habe aber nirgendwo was gefunden wo gezeigt wird wie ich nur eine Zeile nach der anderen einlese.
Sehe immer nur wie ein ganzer Text gelesen oder geschrieben wird.
Das ist ein G-Code Programm. Wie man das schreibt weiß ich.
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Montag 23. Februar 2026, 22:27
von grubenfox
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Dienstag 24. Februar 2026, 00:32
von Pedroski55
Ach, aller Anfang ist schwer! Die Aufgabe ist nicht schwer, kaufen musst Du nichts!
Merke: in Python kann man meistens Probleme auf verschiedene Art und Weise lösen. Hier ein Beispiel:
Code: Alles auswählen
# /usr/bin/python3
import regex as re
info = '/home/peterr/temp/cnc_zeug.txt'
speicherpfad = '/home/peterr/temp/cnc_zeugV2.txt'
def main():
with open(info) as infile:
data = infile.readlines()
# finde alle Yxx.xxx
e = re.compile(r'Y(\d+\.\d+)')
# nicht die alte Daten überschreiben, falls noch gebraucht
neue_data = []
# print kann man vergessen, nur für info
# nehme an, es gibt nur einen Y Wert pro Zeile
# hier werden alle Y Werte verdoppelt, kann man ändern
for d in data:
print(d)
res = e.search(d)
if res:
print(res.group(1))
num = float(res.group(1))
num = num * 2
print(num)
num = str(num)
d = re.sub(res.group(), 'Y' + num, d, count=1)
neue_data.append(d)
else:
neue_data.append(d)
# vergleiche alt und neu aus Neugier
for i in range(len(data)):
print('Alt: ', data[i].rstrip())
print('Neu ', neue_data[i].rstrip())
# mache aus eine Liste einen String
s = ''.join(neue_data)
with open(speicherpfad, 'w') as raus:
raus.write(s)
if __name__ == "__main__":
main()
# man gucke mal im Texteditor wie die neue Datei aussieht
Selber benutze ich Python Idle. Das ist eine Programmierumgebung die umsonst mit Python kommt. Starte Idle, dann kann man jede Zeile, Function, oder vielleicht loop in einem Program einzeln ausprobieren. Dann sieht man schell, wie alles abläuft. Profis mögen Idle nicht. Bin ja kein Profi, mir gefällt's!
Wenn die Eingangsdatei enormgroß ist, sollte man der Sache etwas anders angehen!
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Dienstag 24. Februar 2026, 10:46
von Sirius3
@Pedroski55: wenn man gar keine Erweiterung vom regex-Paket braucht, dann kann man gleich auch nur `re` benutzen.
Konstanten werden nach Konvention KOMPLETT_GROSS geschrieben. `data` ist ein sehr generischer Begriff für `lines` (ist zwar auch generisch, aber nicht so).
`e`, `d` oder `s` sind dann ganz schlechte Variablennamen. Der reguläre Ausdruck ist sehr einschränkend. Vor allem merkt man nicht, dass z.B. ein negativer Y-Wert gar nicht konvertiert wurde.
Statt Strings mit str und + zusammenzubauen, benutzt man f-Strings.
re.sub mit einem beliebigen String zu benutzen ist gefährlich. Dein String hat einen Punkt (.) der für ein beliebiges Zeichen steht. Du hast vielleicht Glück, weil Du nur das erste Vorkommen suchst, aber wenn die Zeile "Y134 Y1.4" enthalten würde, würdest Du nach "Y1.4" suchen und statt dessen "Y134" finden, was dann zu "Y14.0 Y1.4" führt.
Wenn im else-Block die selbe Zeile steht wie im if-Block, kannst Du die Zeile einmal danach schreiben.
Über einen Index iteriert man nicht, wenn man sowohl data, als auch neue_data in einer for-Schleife benutzen will, dann benutzt man zip.
Einfacher funktioniert das ganze, wenn man `re.sub` gleich eine Funktion übergibt.
Code: Alles auswählen
import re
INPUT = "/home/peterr/temp/cnc_zeug.txt"
OUTPUT = "/home/peterr/temp/cnc_zeugV2.txt"
REGEX_Y = re.compile(r"Y\S+")
def double_num(match):
num = float(match.group(0).removeprefix("Y"))
return f"Y{num * 2}"
def main():
with open(INPUT) as infile:
lines = list(infile)
new_lines = [
re.sub(REGEX_Y, double_num, line)
for line in lines
]
for old, new in zip(lines, new_lines):
print('Alt: ', old.rstrip())
print('Neu ', new.rstrip())
with open(OUTPUT, 'w') as outfile:
outfile.writelines(new_lines)
if __name__ == "__main__":
main()
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Dienstag 24. Februar 2026, 11:39
von Kebap
Zwaehn hat geschrieben: Montag 23. Februar 2026, 19:45
Ich habe mir einige Videos angeguckt, habe aber nirgendwo was gefunden wo gezeigt wird wie ich nur eine Zeile nach der anderen einlese.
Ich würde für solche Grundlagen das offizielle Python-Tutorial empfehlen, und nicht irgendwelche zufälligen Videos..

Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Dienstag 24. Februar 2026, 12:00
von DeaD_EyE
Wie soll das funktionieren,
double_num ist eine Funktion, aber
str/bytes werden erwartet.
Wäre cool, wenn das funktionieren würde. Kannst deine Verbesserung nochmal überarbeiten.
Eigentlich wollte ich mich hier komplett heraushalten. Mein erster Gedanke war, OH Gott, Regex. Anstatt ein Problem gibt es jetzt 2 Probleme.
Besonders Anfänger finden das richtig geil, wenn sie dann neben Python noch regex lernen müssen.
Und vieles kann man nicht mit regex verarbeiten, z.B. HTML, dass sogar Mathematisch nachgewiesen worden ist.
Code: Alles auswählen
import re
from decimal import Decimal
from pathlib import Path
REG_Y = re.compile(r'Y(\d+\.\d+)')
def manipulate_y(gcode_file, factor: int|float|Decimal):
factor = Decimal(factor)
with open(gcode_file) as file:
for line in file:
if match := REG_Y.search(line):
value = Decimal(match.group(1))
value *= factor
# Y kommt pro Zeile hoffentlich nur einmal vor
line = REG_Y.sub(f"Y{value:03f}", line, 1)
yield line
if __name__ == "__main__":
gcode_txt = Path.home().joinpath("Desktop", "gcode.txt")
for line in manipulate_y(gcode_txt, 10.0):
# lineend ist bereits im gcode enthalten
print(line, end="")
Fehler haben reale Auswirkungen (abgebrochener Bohrer, Werkzeugfutter zerstört usw.). Das kann teuer werden.
Deswegen würde ich sowas ausgiebig mit vorhandenen Dateien testen und ggf. die CNC ohne Werkzeug operieren lassen oder wenn es geht, eine Simulation starten.
Ich weiß z.B. nicht, ob Y-Koordinaten in einer Zeile zweimal vorkommen können. Wenn das so ist, funktioniert der Code nicht richtig.
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Dienstag 24. Februar 2026, 14:02
von sparrow
DeaD_EyE hat geschrieben: Dienstag 24. Februar 2026, 12:00
Wie soll das funktionieren,
double_num ist eine Funktion, aber
str/bytes werden erwartet.
Wäre cool, wenn das funktionieren würde.
Dann ist es wohl cool.
Die
Dokumentation hilft wie immer weiter.
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Dienstag 24. Februar 2026, 14:34
von DeaD_EyE
Habs nachgelesen und die Doku ist verbesserungswürdig. Ich hätte Typehints erwartet. Hier der relevante Teil:
Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl. If the pattern isn’t found, string is returned unchanged. repl can be a string or a function
Ich hatte das vorhin getestet und habe eine TypeError bekommen. Jezt habe icbh es nochmal getestet, kein TypeError, funktioniert.
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Dienstag 24. Februar 2026, 19:52
von Zwaehn
Hallo Leute,
danke nochmal für eure schnellen Antworten.
Die original Datei ist 55368 Zeilen lang und hat eine Größe von 1,27mb. Ist also ziemlich lang. Und ja, Y kommt in jeder Zeile nur einmal vor. Sonst würde meine Fräsmaschine warschenlich gar nicht erst losfahren.
Hab den Vorschlag von Sirius3 direkt ausprobiert. Ich habe den Pfad angepasst und sonst nix verändert. Bei mir kommt folgende Fehlermeldung.
File "C:\Desk\Phyton\Erste Versuche\Forum.py", line 28
main()aussieht
^^^^^^^^
SyntaxError: invalid syntax
Ich weiß nicht was man ändern soll.
Bei dem vorschlag von DeaD_EyE habe ich keine Veränderung in meinder Datei festgestellt. Muss ich da noch den Umrechnungsfaktor angeben?
Ihr seid echt die Besten, das ihr euch so viel Mühe gibt. DANKE
Re: Y Koordinaten in einer Datei multiplizieren
Verfasst: Dienstag 24. Februar 2026, 21:04
von sparrow
@Zwaehn: Das wird so ein bisschen schwierig.
Die sauberste Umsetzung ist die von Sirius3. Die funktioniert auch völlig einwandfrei.
Das Problem ist, dass du seine Lösung nicht verstehst. Kannst du auch gar nicht, weil du, wie du sagst, mit Python "bisher nur herumgespielt hast".
Wenn man programmiert, baut man meiner Meinung nach auf einem Stapel von "Wissen" auf.
Man muss seine Werkzeuge beherrschen. Zum Beispiel den Editor in dem man schreibt.
Wissen über das Betriebssystem.
Dann grundsätzliche Wissen, wie man programiert.
Und am Ende dieses Wissen in einer Programmiersprache anwenden.
Das Problem ist, dass du schon beim Speichern des Codes einen Fehler gemacht zu haben scheinst. Aber wenn das nicht klappt, ist das schon schwierig.
Und du kannst den nicht aus der Fehlermeldung ableiten und korrigieren, weil du keine Erfahrung mit der Sprache hast und wieder wieder bei dem Problem landen, dass du Code bekommen hast, den du nicht verstehst.
Aus eigener Erfahrung, denn wir sind alle ja den Weg gegangen, ist das Lernen der Sprache unabdingbar. Möglicherweise auch Programmieren an sich, wenn du da noch keine Erfahrung hast. Da ist Python nicht die schlechteste Wahl, weil es ursprünglich mal als Schulungssprache konzipiert wurde.
Dieses Erfragen von Code halte ich für nicht zielführend.