Python: Annuler un fichier readline() afin pointeur de fichier est de retour dans l'état d'origine
Je suis de naviguer à travers un Python pointeur de fichier d'un fichier texte en mode lecture seule à l'aide de fichier.readline() recherche pour un de spécial en ligne. Une fois, j'ai trouvé que la ligne que je veux passer le pointeur de fichier à une méthode qui sattend à ce que le pointeur de fichier au DÉBUT de cette readline (pas juste après elle.)
Comment puis-je essentiellement annuler un fichier.readline() opération sur un pointeur de fichier?
Vous devez vous connecter pour publier un commentaire.
Vous devez vous rappeler la position en appelant
file.tell()
avant la readline et puis l'appel defile.seek()
pour revenir en arrière. Quelque chose comme:Je ne me souviens pas si il est possible d'appeler des
file.seek()
à l'intérieur d'unfor line in file
boucle donc j'ai l'habitude de simplement écrire lewhile
boucle. Il y a probablement beaucoup plus pythonic moyen de le faire.fp.readline()
après le chercher!Vous enregistrez le point de départ de la ligne avec
thefile.tell()
avant d'appelerreadline
, et de revenir à ce point, si vous en avez besoin, avecthefile.seek
.comme vous le voyez, le chercher/dire "paire" est "défaire", pour ainsi dire, le pointeur de fichier mouvement effectué par
readline
. Bien sûr, ceci ne peut fonctionner que sur une réelle adressable (c'est à dire, disque) de fichier, pas (par exemple) sur le dossier comme des objets construits w/makefile méthode de sockets, etc etc.Si votre méthode veut simplement parcourir le fichier, vous pouvez utiliser
itertools.chain
de faire un itérateur:If the file is opened in text mode, only offsets returned by tell() are legal.
\r\n
va se traduire par d'\n
si vous perdez un personnage. Dans ce cas, que le caractère serait le CR (\r
), donc pas un avis 😉Si vous ne savez pas la dernière ligne parce que vous n'avez pas le visiter, vous pouvez lire en arrière jusqu'à ce que vous voyez un caractère de saut de ligne: