2016-04-16 3 views
0

Dieser Code kombiniert zwei Dateien (Beschleunigung & fein) und schreibe sie in eine neue Datei (alles).Wie erkenne ich leere Zeilen in einer Datei, während ich die Daten in dieser Datei mit einem anderen Satz kombiniere, und höre auf, ob die Schleife erkannt wurde?

Fein ist eine bereits gesetzte Datei mit 10 Datenzeilen, während die Daten in der Geschwindigkeitsdatei von einem anderen Code angehängt werden. Manchmal, wenn ich die Daten aus dem anderen Code eingabe, könnten die Daten für die Geschwindigkeitsdatei weniger als 10 Zeilen benötigen.

Also, was ich diesen Code tun soll, ist die erste leere Zeile in der Geschwindigkeitsdatei zu erkennen, dann stoppen Sie die for-Schleife, wenn die Zeile leer ist und nur die Zeilen vor der Leerzeile in die Datei geschrieben alles.

zB

fine.txt (bereits gesetzt Datei):

xxxxxxxxxxxx 
aaaaaaaaaaa 
ssssssssss 
wwwwweeeee 
uuuuuuuuuu 
ooooooooooo 
nnnnnnnnn 
e.t.c....... 

speeding.txt (Datei, die Daten aus dem Code erhält):

111111111 
999999999 

everything.txt (wo Die Daten von beiden Codes werden angehängt) sollte jetzt wie folgt aussehen:

xxxxxxxxxxxx --- 111111111 
aaaaaaaaaaa --- 999999999 

statt:

xxxxxxxxxxxx --- 111111111 
aaaaaaaaaaa --- 999999999 
ssssssssss 
wwwwweeeee 
uuuuuuuuuu 
ooooooooooo 
nnnnnnnnn 

#Dies ist, was mein Code jetzt

Antwort

0

Sie können die Datei mit str.split tut gespalten ("/ n").

Sie haben jetzt eine Liste von Textzeilen.

Sie können durch diese Liste iterieren und prüfen, ob Sie sich in einer Leerzeile befinden.

for line in speeding.split(\n): 
    if line == "": 
     break 
+0

Ich habe bereits versucht, dass es nur eine Fehlermeldung Attribut zeigte: ‚_io.TextIOWrapper‘ Objekt hat kein Attribut ‚split‘ – User2434

+0

'Linien = open („filename“," r "). read(). split (" \ n ")' – kpie

1

[kpie] hat die richtige Idee mit break. Es ist nicht nötig, die gesamte Datei in den Speicher zu laden, da OP bereits Zeile für Zeile durchläuft. fügen Sie stattdessen die Bedingung, um Ihre bestehende Schleife:

for speedline, fineline in zip_longest (speeding, fine, fillvalue=""): 
    if not fineline.strip(): # if fineline is empty or only whitespace 
     break 
    everything.write (fineline.strip() + " --- " + speedline.strip() + "\n") 
+1

^Beste Antwort. – kpie

+0

es funktioniert wie ein Charme, danke – User2434

Verwandte Themen