2017-03-11 2 views
0

Ich arbeite an irgendeinem Projekt. Ich habe C++ und Java-Hintergrund, aber ich habe keinen Python-Hintergrund. Ich habe gegeben txt-Datei wie folgt:Ich kann Variable in den inneren nicht erreichen, wenn sonst Aussagen

G1 X000 Y00
X00
Z000
G0 X121.212 Z5.32
X0.00 Y3.000

ich brauche G hinzuzufügen .. zu den nächsten Zeilen, bis es neu G sieht ... Es kann G1 oder G0 oder G5 etc sein .. so wird ein Ergebnis führen, wie unten

G1 X000 Y00
G1 X00
G1 Z000
G0 X121.212 Z5.32
G0 X0.00 Y3.000

Mein Code ist unten.

command = "" 
with open('Model.ngc', 'r') as f: 
    with open("out.txt", "w") as f1: 
     for line in f: 
      if line in ['\n', '\r\n']: 
       f1.write(line) 
      elif line.startswith('M', 0, 1): 
       f1.write(line) 
      else: 
       command = line.split(' ', 1)[0] 
       if command == 'G0' or command == 'G00': 
        command = 'G00' 
       elif command == 'G1' or command == 'G01': 
        command = 'G01' 
       elif command == 'G2' or command == 'G02': 
        command = 'G02' 
       elif command == 'G3' or command == 'G03': 
        command = 'G03' 

       if (line.startswith('G0 ', 0, 3) or line.startswith('G1 ', 0, 3) or line.startswith('G2 ', 0, 3) or 
        line.startswith('G3 ', 0, 3) or line.startswith('G4 ', 0, 3) or line.startswith('G5 ', 0, 3) or 
        line.startswith('G6 ', 0, 3) or line.startswith('G7 ', 0, 3) or line.startswith('G8 ', 0, 3) or 
        line.startswith('G9 ', 0, 3)): 

        if command == 'G00': 
         f1.write(line.replace('G0', 'G00')) 
        elif command == 'G01': 
         f1.write(line.replace('G1', 'G01')) 
        elif command == 'G02': 
         f1.write(line.replace('G2', 'G02')) 
        elif command == 'G03': 
         f1.write(line.replace('G3', 'G03')) 
        elif command == 'G04': 
         f1.write(line.replace('G4', 'G04')) 
        elif command == 'G05': 
         f1.write(line.replace('G5', 'G05')) 
        elif command == 'G06': 
         f1.write(line.replace('G6', 'G06')) 
        print(command) 
       else: 
        # print(line) 

        if (line.startswith('G00') or line.startswith('G01') or line.startswith('G02') or 
         line.startswith('G03') or line.startswith('G04') or line.startswith('G05') or 
         line.startswith('G06') or line.startswith('G07') or line.startswith('G08') or line.startswith('G09')): 
         # Because it can be already converted 
         f1.write(line) 
        else: 
         f1.write(command + line) 

Ich versuche, G1 oder G0 aus vorheriger Zeile zu erhalten und zu Befehl zuweisen. Es klappt. wenn ich versuche, in der letzten else statement zu erreichen, zeigt es, dass mein Befehl Variable leer ist und ich weiß nicht, wie man damit umgeht.

Antwort

0

Teilen Sie jede Zeile und prüfen Sie, ob das erste Wort mit G beginnt. Wenn ja, dann haben Sie das Wort als Präfix pre hinzugefügt. Wenn die Zeile nicht das Präfix hat, dann verbinden Sie das gespeicherte Wort mit der Zeile mit Leerzeichen !!

pre="" 
for line in f1.read().splitlines(): 
    word = line.split() 
    if word and word[0] and word[0][0]=="G": 
     pre=word[0] 
    else: 
     line = " ".join([pre, line]) 
    print line 

Ausgabe

G1 X000 Y00 
G1 X00 
G1 Z000 
G0 X121.212 Z5.32 
G0 X0.00 Y3.000 

Hoffe, es hilft!

+0

es funktioniert nicht. Traceback (jüngste Aufforderung zuletzt): File "NgcToGcode.py", Zeile 6, in wenn Wort [0] und das Wort [0] [0] == "G": Indexerror: Listenindex aus Bereich – Soulmaster

+0

können Sie prüfen, ob die gelesene Zeile direkt von Ihrer Seite ist? Coz, ich habe es in der Konsole versucht und erst dann die Antwort hier geteilt! Dieses Snippet sollte direkt nach 'mit open (" out.txt "," w ") als f1 kommen:' –

+0

oder es gibt einen Fall, wenn die gelesene Zeile leer ist! Ich habe den Schnitt dafür hinzugefügt. –

0

Sie können nach 'G'in string suchen, Teilstring und verwenden Sie es zu Zeilen, die nicht haben. Ich versuchte auf meine Art,

with open('newfile.txt','r') as f: 
Gval = 'G0' 
newlines=[] 
for line in f: 
    if 'G' in line: 
     Gval = line[line.index('G'):line.index(' ')] 
     newlines.append(line) 
    else: 
     l = Gval+' '+line 
     newlines.append(l) 
f.close() 
newf = open('filenew.txt','w') 
for item in newlines: 
    newf.write("%s"%item) 
newf.close()