2017-11-23 5 views
2

Ich habe eine Textdatei mit mehreren Zeilen alle mit den Zahlen von 1 bis 5 im folgenden Format: '1,2,3,4,5'. Ich möchte jede Zeile der Textdatei lesen. In jeder Zeile möchte ich die '1' finden.Lesen von Textdatei mit for-Schleife

Ich möchte dann den Wert eines Listenwerts um 1 erhöhen, abhängig von der Position der '1' in der Textdatei. Z.B. Wenn die '1' in der Textdatei auf Position 0 steht, soll die Listenposition 0 um 1 erhöht werden (für jede Zeile in der Textdatei).

Mein aktueller Code liest die Textdatei nicht, deshalb liest er nicht die '1' in jeder Zeile und führt die oben beschriebene Funktion aus. Hier ist mein Code (sorry für die lange Erklärung):

with open("test file.txt","r+") as file: 
    oneNum = [0,0,0,0,0] 
    text = [line.rstrip("\n") for line in open("test file.txt")] 
    for line in text: 
     for counter in range(0,4): 
      if line[counter] == "1": 
       oneNum[counter] = oneNum[counter] + 1 
+0

Was erwarten Sie von jedem Textelement? Momentan sieht es so aus, als würde es jede Zeile als String analysieren, dh Sie erhalten "1,2,3,4,5", wodurch Ihre Iteration nicht jedes Zeichen durchläuft (es wird nur "1" gelesen, ", "," 2 "und", ") – WNG

+0

' für Zeile in Datei' – Elazar

+0

Ich erwarte, dass jedes Element eine Ganzzahl enthält. Wie mache ich meine for-Schleife, um die Listenwerte 0 bis 4 zu lesen. Will: für Zähler im Bereich (0,4): Lies nur die Textwerte in den Positionen 0 und 3. Tut mir leid, ich bin nur ein Anfänger. –

Antwort

1

Aufgrund der einfachen Eingabeformat wie in der Frage beschrieben, kann die Implementierung vereinfacht werden (und korrigiert):

  • initialisieren oneNum mit Nullen
  • Übersetzen
  • Für jede Zeile in der Datei
    • Finden Sie den Index "1"
    • Der Index zur Listenposition: Da die möglichen Indizes 0, 2, 4, 6, 8 sind, können wir einfach durch 2 teilen, um zu 0, 1, 2, 3, 4
    • Inkrementieren Sie den Wert am richtigen Index in oneNum

So:

with open("test file.txt") as file: 
    oneNum = [0] * 5 
    for line in file: 
     index = line.find("1") // 2 
     oneNum[index] += 1 
0
with open("test file.txt", "r+") as file: 
    oneNum = [0 for _ in range(5)] # Easier to adjust later 
    for line in file: 
     position = [num.strip() for num in line.split(',')].index('1') 
     oneNum[position] += 1 
0

reguläre Ausdrücke Modul Mit Python, macht re dies einfach zu tun. Zum Beispiel war etwa dies die Inhalt der Eingabedatei:

1,2,3,4,5 
2,1,3,4,5 
3,2,1,4,5 
4,5,1,3,2 

und das ist Code zeigen, wie re zu verwenden, um das Problem zu lösen. Beachten Sie, dass durch Entfernen der ',' Zeichen die Position des übereinstimmenden Zeichens verwendet werden kann, um den entsprechenden Zähler zu aktualisieren.

import re 

oneNum = [0, 0, 0, 0, 0] 
with open("test file.txt") as file: 
    pattern = r"1" 
    for line in file: 
     line = line.strip().replace(',', '') 
     match = re.search(pattern, line) 
     if match: 
      counter = match.span()[0] 
      oneNum[counter] += 1 

print(oneNum) # -> [1, 1, 2, 0, 0]