2017-04-25 2 views
0

Ich schreibe zuerst eine Tiefe und Breite Suche nach einer Liste von Vertices in Python. Ich versuche, eine .txt-Datei, die wie das aussieht zu lesen in folgenden:Python fügt beim Lesen von .txt-Dokumenten zusätzliche n Zeichen und Leerzeichen ein

50 
    60 
    45 
    12 
    68 
    21 
    13 
    24 

Mein Code lautet wie folgt:

def readFile(x): 
    fin = open(x, 'r') 
    readline = fin.read() 
    x,y = [], [] 

    for line in readline: 
     row = line.split() 
     x.append(row[0]) 
     print(x) 
     y.append(row[1]) 

Leider, wenn der Code die txt-Datei in Python liest dies nur liest die 6 in das Programm und endet damit, dass der Index für y außerhalb des Bereichs liegt. In meiner .txt-Datei gibt es keine Leerzeichen oder \ n Zeichen außer am Ende jedes Satzes von Punkten.

Irgendwelche Ideen, warum es all diesen zusätzlichen Leerraum und \ n Zeichen hinzufügt?

Side Hinweis: Wenn ich die verwenden, ist die Ausgabe genau das, was ich suche, aber ich kann das nicht indizieren.

with open(x) as fin: 
     for line in fin: 
      sys.stdout.write(line) 

Jede Hilfe wäre sehr willkommen!

+0

Können Sie Ihre Beispieltextdatei in einen Codeblock einfügen? –

Antwort

0

Weil Sie nicht genug Antworten haben, hier ist eine andere !

def readFile(x): 
    with open(x, 'r') as fin: 
     x, y = [], [] 
     for line in fin: 
      row = line.rstrip() 
      x.append(row[0]) 
      print(x) 
      y.append(row[1]) 
0
def readFile(x): 
    fin = open(x, 'r') 
    readline = fin.readlines() 
    x,y = [], [] 
    for line in readline[::2]: #to skip the extra line [before editing question] 
     x.append(line[0]) 
     y.append(line[1]) 

Editiert:. Sie haben readlines() verwenden oder lesen() split() [beide werden den Inhalt in den Speicher lesen] oder Sie können nur das Objekt iterieren [dies wird nur eine Zeile auf halten Zeit]

Sie haben Streifen zu verwenden, extra weiß Zeichen entfernen nicht geteilt

def readFile(x): 
    with open(x, 'r') as fin: 
     x, y = [], [] 
     for line in fin: 
      row = line.strip() 
      x.append(row[0]) 
      y.append(row[1]) 
     print(x,y) 

readFile('a.txt')   

Ausgang: [ '5', '6', '4', '1', '6', ' 2 ',' 1 ',' 2 '] [' 0 ',' 0 ',' 5 ',' 2 ',' 8 ',' 1 ',' 3 ',' 4 ']

+0

Während dieses Code-Snippet willkommen ist und möglicherweise etwas Hilfe bietet, wäre es [stark verbessert, wenn es eine Erklärung enthielt] (// meta.stackexchange.com/q/114762) von * wie * es die Frage anspricht. Ohne dies hat Ihre Antwort viel weniger pädagogischen Wert - denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, nicht nur die Person, die jetzt fragt! Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. –

0

Sie sind in der Nähe, entfernen Sie readline = fin.read(); Das liest die erste '6'.

dann, hange for line in readline:-for line in fin:

Schließlich scheint es, dass Ihre Datei Leerzeilen hat, so dass Sie sie überspringen müssen:

line = line.strip() 
if line != '': 
    row = line 
    x.append(row[0]) 
    print(x) 
    y.append(row[1]) 
+0

Das funktioniert gut, um die erste Menge von Vertices aus der Datei zu bekommen, aber dann endet das Programm und gibt x = ['50'] y = [] zurück. Ich suche nach x = [5] y = [0], aber für die gesamte Liste der Scheitelpunkte nicht nur die erste Zeile. Vielen Dank! –

+0

Dies funktioniert, wenn ich Leerzeichen zwischen meinen Scheitelpunkten in meiner Textdatei hinzufüge, also werde ich nur sicherstellen, dass wenn Scheitelpunkte hinzugefügt werden, sie Leerzeichen zwischen den X- und Y-Koordinaten haben! Vielen Dank! –

+0

Sie müssen nicht. Aufgrund deines ursprünglichen Posts dachte ich, dass deine Datei leer ist. –

Verwandte Themen