2010-01-21 10 views
30

sagen, dass ich diesen einfachen Python-Skript habe:Erneutes Öffnen von Dateien in Python?

file = open('C:\\some_text.txt') 
print file.readlines() 
print file.readlines() 

Wenn es ausgeführt wird, wobei der erste Druck druckt eine Liste den Text der Datei enthält, während der zweite Druck eine leere Liste druckt. Nicht völlig unerwartet, denke ich. Aber gibt es eine Möglichkeit, die Datei zurückzuspulen, damit ich sie wieder lesen kann? Oder ist der schnellste Weg, es wieder zu öffnen?

+1

Sie könnten versuchen, 'file.close()' und '' open' gegen file.seek' und berichten auf was du gelernt hast. Dann könnten wir Ihre Ergebnisse kommentieren. –

+1

Hey c00kiemonster! Wenn Aloks Antwort Ihre Frage beantwortet, drücken Sie bitte das Häkchen links neben seiner Antwort. Dies markiert es als "die richtige Antwort", damit andere Menschen in der Zukunft wissen, dass es funktioniert. Außerdem gibt es Ihnen zusätzliche Reputationspunkte :-) – Smashery

+1

Ich habe einen schnellen Test auf einer 170k-Datei ausgeführt, und es war ziemlich genau die gleiche Zeit, jeweils ein paar Millisekunden. – c00kiemonster

Antwort

65

Sie können den Dateizeiger zurückgesetzt seek() durch den Aufruf:

file.seek(0) 

es tun wird. Sie benötigen diese Zeile nach Ihrer ersten readlines(). Beachten Sie, dass file zufälligen Zugriff für die oben genannten Arbeiten unterstützen muss.

+1

Ehrfürchtig. Erinnert mich an den guten alten Peek und poke Zeug mit dem ehrwürdigen C64! – c00kiemonster

+0

Ich denke, es ist Standard-POSIX-Schnittstelle. –

+0

@Stefano: Ich denke du hast Recht. 'seek()' von Dateiobjekten in Python ist höchstwahrscheinlich ein dünner Wrapper um 'fseek()' oder ähnliches. –

3

Für kleine Dateien, dann ist es wahrscheinlich viel schneller die

file = open('C:\\some_text.txt') 
fileContents = file.readlines() 
print fileContents 
print fileContents # This line will work as well. 

Natürlich im Speicher Inhalt der Datei nur zu halten, wenn es sich um eine große Datei ist, könnte diese Belastung auf den RAM setzen.

3

Denken Sie daran, dass Sie immer die mit Anweisung kann zum Öffnen und Schließen von Dateien:

from __future__ import with_statement 

with open('C:\\some_text.txt') as file: 
    data = file.readlines() 
#File is now closed 
for line in data: 
    print line 
Verwandte Themen