2016-05-04 7 views
-1

Ich suche schon seit einiger Zeit nach einer Lösung für ein Problem, das ich habe, aber ohne Erfolg.Auf Leerzeilen prüfen und entfernen/die Zeilen darunter verschieben

Ich habe die folgende Funktion:

def showEmail(): 
    f = open("players.txt","r") 
    for line in f: 
     lineList = line.split(";") 
     print "Name: " + lineList[0] + " " + lineList[1] 
     print "Email address: " + lineList[2] 
     print "" 
    f.close() 

Meine Datei hat Text wie folgt:

Sam;Tyler;[email protected];0710503687;6;0 
Peter;Bond;[email protected];0798415758;6;0 
Joe;Blogg;[email protected];0749814574;1;60 

Das Problem tritt auf, wenn eine leere Zeile zwangsläufig in meiner Datei erscheint (wenn eine Zeile ändern, die Das Programm erstellt eine neue Zeile ähnlich der geänderten und ändert den Wert dieser Zeile, löscht dann die ursprüngliche Zeile und kopiert die neue Zeile, also die leere Zeile, und kopiert sie in ein neues Dokument. Dies geschieht wie gezeigt. :

def writeToFile(): #function to write all new (modified) lines from players to a temps file, deletes players and rename temps to 'players' 
    f = open("players.txt",'r') # Input file 
    t = open("temp.txt", 'w') #Temp output file 

    for line in f: 
     if line != originalInfo: #doesn't write the line that is the same as the original info 
      t.write(line) #writes all lines apart from the original line (one that needs to be deleted) 

    f.close() 
    t.close() 
    os.remove("players.txt") #deletes players 
    os.rename('temp.txt', 'players.txt') #new file with modified info is renamed to players 

Wenn die Datei der folgende enthält, mir das Programm sagen, dass die Liste Index aus gebunden ist, was Sinn macht, weil es die leere Zeile als Liste betrachtet.

Sam;Tyler;[email protected];0710503687;6;0 
Peter;Bond;[email protected];0798415758;6;0 

Joe;Blogg;[email protected];0749814574;1;60 

Wie kann ich für dieses Problem Abhilfe schaffen? Vielen Dank!

+1

ich bin nicht klar, auf w Der Dateischreibabschnitt 'für Zeile in f: ...' würde Leerzeilen erzeugen. Wenn die Eingabedatei keine Zeilen enthält, die ausschließlich aus "\ n" bestehen, sollte in der Ausgabe keine angezeigt werden. – TigerhawkT3

+0

Welches Problem möchten Sie lösen: Die Schreib-Subroutine sollte keine Leerzeilen schreiben oder die Lese-Subroutine sollte mit Leerzeilen umgehen können? – manu190466

+0

Ich musste die Datei mit 'fullName = forename +" füllen; " + Nachname + ";" + E-Mail + ";" + Telefon + ";" + Teilung + ";" + Punkte + "\ n" 'weil ohne das Hinzufügen von zwei Spielern in einer Reihe diese nebeneinander gestellt werden, nicht in einer separaten Zeile. – Johny

Antwort

1

Wenn Sie geändert haben und möglicherweise eine Zeile gelöscht, sollten Sie nur prüfen, ob die Zeile vor dem Schreiben sie leer ist:

def writeToFile(): 
    ... 
    for line in f: 
     if line != originalInfo and line != "\n" # or whatever you're using for an empty line 
      t.write(line) 
    ... 
+1

'und line.strip()' ist ein beliebtes Idiom hier zu verwenden. – TigerhawkT3

+0

das hat den Trick, danke – Johny

0

Ihre Datei wie eine CSV-Datei formatiert ist, also was über csv-Modul von Python angeboten, schauen unten auf der exemple:

import csv 

def showEmail(): 
    with open("player.txt","r") as f: 
     csvFile = csv.reader(f, delimiter=';') 
     for line in csvFile: 
      if line: 
       print("Name: {} {}".format(line[0], line[1])) 
       print("Email address: {}".format(line[2])) 
       print("") 
0

ich mag diese besser:

with open(file) as f_in: 
    return filter(None, (line.rstrip() for line in f_in)) 
Verwandte Themen