2016-11-01 4 views
-1

Ich studiere Python-Datei-I/O. Ich machte ein einfaches Programm (main.py).Python-Datei lesen, Zeile für Zeile schreiben

Mein Ziel wird Zeile für Zeile gelesen und Zeile für Zeile geschrieben.

fstream = open("input2.txt", 'r'); 
line = fstream.readline() 
while line: 
    print(line); 
    line = fstream.readline() 

fstream.close() 

unten sind meine input2.txt Datei

start. 
hello world. 
hello python. 
I am studying file I/O in python 
end. 

wenn ich laufe Python-Programm

Python main.py

Dann Ergebnis ist ...

start. 

hello world. 

hello python. 

I am studying file I/O in python 

end. 

Das ist nicht das gleiche wie ich erwartet hatte.

So modifizierte ich die main.py

fstream = open("input2.txt", 'r'); 
line = fstream.read().split("\n") 
while line: 
print(line); 
line = fstream.read().split("\n") 

fstream.close() 

aber mein Programm in Endlosschleife diged.

picture of infinite loop

Um dieses Problem zu lösen, was soll ich tun?


Das Ergebnis, das ich erwartet habe, ist das folgende.

start. 
hello world. 
hello python. 
I am studying file I/O in python 
end. 
+0

'Import sys',' sys.stdout.write' statt 'print' –

+1

Versuchen' rstrip() '. –

+0

Geben Sie keinen Python-Code ohne Einzug ein. Schlecht eingerückter Python-Code ist Unsinn. – khelwood

Antwort

2

Die Druckfunktion fügt automatisch ein neues Zeilenzeichen hinzu. So

print msg 

Inhalt der Variablen msg durch eine neue Zeile gefolgt gedruckt wird

Wenn Sie nicht möchten, dass Python die Hinter neue Zeile zu drucken, müssen Sie ein Komma am Ende hinzufügen. Dadurch wird die Nachricht ohne den abschließenden Zeilenumbruch gedruckt. Und wenn msg bereits eine neue Zeile hat, was beim Lesen neuer Zeilen aus einer Datei der Fall ist, sehen Sie anstelle von doppelten Zeilen eine neue Zeile.

Wenn Sie Python 3 verwenden, wo Print als eine Funktion aufgerufen wird, können Sie das Argument end angeben. Siehe https://docs.python.org/3/library/functions.html#print

print(msg, end = '') 
0

Zunächst einmal verwenden, um eine with Anweisung, um die Datei zu öffnen, so dass Sie brauchen, um es nicht zu schließen ausdrücklich. Zweitens, verwenden Sie keine while Schleife dafür; Sie können direkt über eine Datei iterieren. Drittens verwenden die rstrip Methode von jedem nachfolgenden Leerzeichen entfernen Zeile, die Sie lesen (oder rstrip('\n') nur Hinterzeilenumbrüche zu entfernen):

with open("input2.txt", 'r') as fstream: 
    for line in fstream: 
     line = line.rstrip('\n') 
     print(line) 
0

Zusätzlich zu den Antworten oben; Sie können auch verwenden.Teilungslinien()

fstream = open("input2.txt", 'r'); 
line = fstream.readline().splitlines() 
while line: 
    print(line[0]); 
    line = fstream.readline().splitlines() 

fstream.close()