2016-05-01 9 views
0

Ich habe eine Frage zu meinem Code. Ich möchte ein True zurückgeben, wenn ein bestimmter Teil meiner vorherigen Zeile gleich dem spezifischen Teil in der aktuellen Zeile ist (in diesem Fall der Z-Teil). Meine Datei sieht wie folgt aus:Finden, ob Teil der vorherigen Zeile gleich ist Teil der aktuellen Zeile in Python

G17 G3 X387.9385 Y200.0000 Z268.4040 R187.9385 
    G17 G3 X200.0000 Y387.9385 Z268.4040 R187.9385 
    G17 G3 X200.0000 Y387.9385 Z268.4040 R187.9385 
    G17 G3 X200.0000 Y353.2089 Z328.5575 R153.2089 

So in diesem Fall ich einen wahren möchte, wenn der Wert nach dem „Z“ (268,4040) in Zeile 2 zu diesem Teil in Zeile gleich ist 1. Damit ein wäre Das stimmt hier. Sobald der Wert in der vorherigen Zeile nicht gleich dem Wert in der aktuellen Zeile ist, möchte ich ein False. Das wäre in Zeile 4 der Fall (328.5575 ist nicht gleich 268.4040). Diese Datei heißt "pointZ.gcode" und hat viele Zeilen. Kann jemand mir mit dem Python-Code helfen, der benötigt wird, um zurückzugeben, was ich will? Vielen Dank!

Mein Code so weit:

q = open("pointZ.gcode", "r") 
searchlines = q.readlines() 
file = "" 
for i, line in enumerate(searchlines): 
    if "Z" in line: 
     zp0 = map(str, searchlines[i+0].split()[4:5]) 
     zp1 = map(str, searchlines[i+1].split()[4:5]) 
     if zp0 == zp1: 
      print("T") 
     else: 
      print("F") 

Das gibt mir den Fehler: Indexerror: Listenindex außerhalb des zulässigen Bereichs

+0

Wo ist Ihr bestehender Code? – Selcuk

+0

Es stürzt ab, weil Sie über ** alle ** Zeilen iterieren und versuchen, auf die nächste Zeile zuzugreifen (mit dem Code 'searchlines [i + 1]'), aber die letzte Zeile ** hat keine ** nächste . Ändern Sie Ihren Code so, dass er entweder in der zweiten Zeile beginnt oder in der vorletzten Zeile anhält. –

Antwort

1

Eine mögliche Lösung, nicht aus der Datei nicht lesen, sondern zeigt einen grundlegenden Algorithmus, die Ergebnisse in einer Liste ansammelt, ist Listenlänge N-1 wo N Anzahl der Zeilen ist.

lines=['G17 G3 X387.9385 Y200.0000 Z268.4040 R187.9385', 
    'G17 G3 X200.0000 Y387.9385 Z268.4040 R187.9385', 
    'G17 G3 X200.0000 Y387.9385 Z268.4040 R187.9385', 
    'G17 G3 X200.0000 Y353.2089 Z328.5575 R153.2089'] 

def lines_equal(curr_line, prev_line, compare_char): 
    curr_line_parts = curr_line.split(' ') 
    prev_line_parts = prev_line.split(' ') 

    for item in zip(curr_line_parts, prev_line_parts): 
     if item[0].startswith(compare_char): 
      return item[0] == item[1] 

results = [] 
prev_line = lines[0] 

for line in lines[1:]: 
    results.append(lines_equal(line, prev_line, 'Z')) 
    prev_line = line 

print(results) 
2

Ich werde den Code hier nicht posten, Sie versuchen möchten. Aber werden Ihnen die Hinweise geben:

1)Read the line from the file. 
2) Split it on basis of " ". 
3) The 4th element of the list is what you want. 
4) Now check it with previous string. You will need to maintain a variable where you will have to store the previous string. Initially it can be null. 
5) If it matches, print True else print False 
Verwandte Themen