1

Recently, Iv'e started to programm in Python. I'm interested in translating lines of G-code :

G1 F1200 X253.644 Y174 Z0.2 E3.05044
G1 X252.388 Y174.497 Z0.2 E3.06822
G1 X251.084 Y174.685 Z0.2 E3.08557

to a txt file of the form :

GoTo(X(253.644), Y(174), Z(0.2))
GoTo(X(252.388), Y(174.497), Z(0.2))
GoTo(X(251.084), Y(174.685), Z(0.2))

I'm not interedsted in the E and F parameters of the G-code. Iv'e tried this code:

with open("C:/Users/ZoharMa/Documents/G code/draft_of_g_code.txt" , 'r') as f:
    for line in f:
        line = line.strip()
        if 'G1' in line:
                new_line =  f'GoTo(X({line.split()[1][1:]}), Y({line.split()[2][1:]}), Z({line.split()[3][1:]}))'
                print(new_line)
                with open("copy.txt", "w") as file:
                    file.write(new_line)
             

but the file I created ( "copy") contains only the final line! ( I'm interested in all lines) I'll appreciate any help! Thank you very much!!!

  • Iv'e found out that I need to enter before each line ( the GoTo command ) 5 digits that start from 00001 , 00002 , 00003 , .... 99999 ( as the number of GoTo lines). For example: 00001 GoTo(253), Y(174), Z(0.2)) could i do this with this code? – זהר מרום Nov 18 '20 at 13:17

1 Answers1

0

You're overwriting the output file for each line. (Also, file.write() doesn't add a newline, hence the switch to print(..., file=...).)

You could open both the input and the output file in one with statement, like so:

with open("C:/Users/ZoharMa/Documents/G code/draft_of_g_code.txt" , 'r') as input_file, open("copy.txt", "w") as output_file:
    for line in input_file:
        line = line.strip()
        if 'G1' in line:
                new_line =  f'GoTo(X({line.split()[1][1:]}), Y({line.split()[2][1:]}), Z({line.split()[3][1:]}))'
                print(new_line)
                print(new_line, file=output_file)

However, it might be safer to just store the new lines in memory and write at the end:

new_lines = []
with open("C:/Users/ZoharMa/Documents/G code/draft_of_g_code.txt", "r") as input_file:
    for line in input_file:
        line = line.strip()
        if "G1" in line:
            new_line = f"GoTo(X({line.split()[1][1:]}), Y({line.split()[2][1:]}), Z({line.split()[3][1:]}))"
            print(new_line)
            new_lines.append(new_line)

with open("copy.txt", "w") as output_file:
    for line in new_lines:
        print(line, file=output_file)

That way you don't end up with a half-written file if your program fails.

AKX
  • 152,115
  • 15
  • 115
  • 172
  • @זהרמרום You're welcome! Please mark the answer as accepted with the checkbox icon next to the vote arrows too :) – AKX Nov 18 '20 at 10:06