2010-07-14 4 views
2

Si j'ai un script qui écrit 1000 lignes dans le fichier, puis continue les expressions régulières par rapport à ce fichier, seules les 100 dernières lignes écrites seront disponibles. Un moyen de contourner cela est de fermer et de rouvrir le fichier. Existe-t-il un moyen de recharger un fichier après avoir été écrit ou devrais-je simplement faire un write close module ouvert? Il peut être pertinent que le fichier journal n'existe pas/est vide lors de la première ouverture.Comment recharger un fichier en python?

>>> the_page = 'some large site opened through urllib' 
>>> logfile = open('./artist/' + tags['ARTIST'], 'r+') 
>>> logfile.write(the_page) 
>>> print logfile.read() 

Rien n'apparaît.

>>> 'Some regular expressions search' 

Recherches sur les 100 dernières lignes écrites.

>>> logfile.close() 
>>> logfile = open('./artist/' + tags['ARTIST'], 'r+') 
>>> print logfile.read() 

Tout apparaît.

>>> 'Some regular expressions search' 

Fonctionne comme prévu.

Répondre

5

Ceci est juste une intuition, mais peut-être un logfile.seek(0) après l'écriture est terminée peut aider. Une explication possible est donnée dans la documentation de file.next:

Cependant, en utilisant seek() pour repositionner le fichier à une position absolue videra le tampon de lecture anticipée.

0
logfile.flush() 

Ceci devrait faire la même chose que l'ouverture puis la fermeture du fichier.

+0

Oui, je veux plutôt faire le contraire. Le rinçage est interchangeable avec la fermeture en ce qui concerne mon problème. – dmikalova

+0

@teratomata, pouvez-vous clarifier pourquoi vous ne voulez pas vider le fichier? –

+0

Flushing efface l'objet fichier, ce que je voulais faire est de recharger le fichier qui a été écrit. En fait, ce que je ne savais pas, je voulais faire était de revenir au début du fichier, qui cherche (0) fait. – dmikalova

-1

Comme le soulignent les commentaires, c'est la mauvaise façon de procéder. chercher (0) est le bon chemin.

Cela avait une réponse tout à fait évidente, je ne ai pas besoin de fermer le fichier ou quoi que ce soit, je peux simplement l'ouvrir à nouveau et il agit de la même manière qu'un rechargement. Alors:

>>> the_page = 'some large site opened through urllib' 
>>> logfile = open('./artist/' + tags['ARTIST'], 'r+') 
>>> logfile.write(the_page) 
>>> logfile = open('./artist/' + tags['ARTIST'], 'r+') 
>>> print logfile.read() 
+0

Cela a probablement fermé le fichier, puis l'a rouvert. Comme l'a écrit Space_C0wb0y, vous devriez probablement chercher (0), car après l'écriture vous êtes positionné à la fin du fichier et c'est pourquoi vous ne pouvez rien lire. – zvone

+0

Avec refcounting de cpython, cela fait juste un caché 'flush' et' close' du fichier lorsque vous rouvrez le fichier. Cela ne fonctionnera pas correctement pour toute implémentation de Python qui utilise un autre type de collection garbarge –

+0

Vous avez raison, je ne sais pas pourquoi je ne m'en suis pas rendu compte. – dmikalova

Questions connexes