6
votes

Pourquoi la deuxième fois que je gère des "readlines" sur le même fichier, rien n'est retourné?

>>> f = open('/tmp/version.txt', 'r')
>>> f
<open file '/tmp/version.txt', mode 'r' at 0xb788e2e0>
>>> f.readlines()
['2.3.4\n']
>>> f.readlines()
[]
>>>
I've tried this in Python's interpreter. Why does this happen?

0 commentaires

4 Réponses :


19
votes

Vous devez chercher au début du fichier. Utilisez f.seek (0) pour revenir au début: xxx


1 commentaires

Oui, c'est tout ce que vous avez à faire. Voir mon exemple supplémentaire.



6
votes

Python garde une trace de l'endroit où vous êtes dans le fichier. Lorsque vous êtes à la fin, cela ne roule pas automatiquement. Essayez f.seek (0) .


0 commentaires

4
votes

En plus de rechercher au début du fichier, vous pouvez également stocker la valeur comme une chose que vous pouvez réutiliser plus tard si vous en avez simplement besoin d'eux en mémoire. Quelque chose comme ceci:

with open('tmp/version.txt', 'r') as f:
  lines = f.readlines()


1 commentaires

C'est une bonne idée, en supposant que l'affiche ne souhaite pas obtenir de nouvelles données à partir d'un fichier qui change fréquemment.



5
votes

La partie importante pour comprendre que certaines des autres affiches n'étaient pas explicitement énoncées, c'est que les fichiers sont lus avec un curseur qui marque la position actuelle dans le fichier. Donc, sur les premières readlines () appelez le curseur se trouve au début de votre fichier et est progressé jusqu'à la fin du fichier car toutes les données de fichiers ont été renvoyées. Sur les secondes Readlines, appelez le curseur est à la fin du fichier, de sorte que lorsqu'il se lit à la fin du fichier, il ne se déplace pas du tout et aucune donnée n'est renvoyée. À des fins éducatives, vous pouvez écrire un bit de code rapide qui ouvrirait un fichier, lire quelques octets ou des lignes de sortie, puis appelez les readlines (), vous verrez que la sortie de l'appel de Readlines () commence où vous avez laissé la sortie. Avec vos lectures précédentes, et continue jusqu'à la fin du fichier.

La recherche (0) L'appel mentionné par d'autres vous permettra de réinitialiser le curseur au début du fichier pour recommencer avec les lectures.


0 commentaires