2010-01-21 7 views
30

Dire que j'ai ce simple script python:Ré-ouvrir les fichiers en Python?

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

Lorsqu'il est exécuté, la première impression imprime une liste contenant le texte du fichier, tandis que la seconde impression imprime une liste vide. Pas complètement inattendu, je suppose. Mais y a-t-il un moyen de «renvoyer» le fichier pour que je puisse le relire? Ou est le moyen le plus rapide juste pour le rouvrir?

+1

Vous pouvez essayer 'file.close()' et '' open' contre file.seek' et retour rapport sur ce que tu as appris Ensuite, nous pourrions commenter vos résultats. –

+1

Hey c00kiemonster! Si la réponse d'Alok répond à votre question, veuillez appuyer sur la coche à gauche de sa réponse. Cela le marque comme "la bonne réponse" pour que les autres personnes à l'avenir sachent que cela fonctionne. De plus, cela vous donne des points de réputation supplémentaires :-) – Smashery

+1

J'ai effectué un test rapide sur un fichier de 170k, et c'était à peu près en même temps, quelques millisecondes chacun. – c00kiemonster

Répondre

65

Vous pouvez réinitialiser le pointeur de fichier en appelant seek():

file.seek(0) 

fera. Vous avez besoin de cette ligne après votre premier readlines(). Notez que file doit prendre en charge l'accès aléatoire pour que cela fonctionne.

+1

Génial. Cela me rappelle le bon vieux peek et poke stuff avec le vénérable C64! – c00kiemonster

+0

Je pense que c'est l'interface POSIX standard. –

+0

@Stefano: Je pense que vous avez raison. 'seek()' des objets de fichier en Python est très probablement un léger wrapper autour de 'fseek()' ou similaire. –

3

Pour les petits fichiers, il est probablement beaucoup plus rapide pour garder tout le contenu du fichier dans la mémoire

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

Bien sûr, si c'est un gros fichier, cela pourrait mettre la pression sur votre RAM.

3

Rappelez-vous que vous pouvez toujours utiliser avec la déclaration pour ouvrir et fermer des fichiers:

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 
Questions connexes