f.seek() et f.tell() pour lire chaque ligne du fichier texte
Je veux ouvrir un fichier et de lire chaque ligne à l'aide de f.seek()
et f.tell()
:
test.txt:
abc
def
ghi
jkl
Mon code est:
f = open('test.txt', 'r')
last_pos = f.tell() # get to know the current position in the file
last_pos = last_pos + 1
f.seek(last_pos) # to change the current position in a file
text= f.readlines(last_pos)
print text
Il lit le fichier en entier.
- Oui, c'est ce que
readlines
n'. Quelle est ta question exactement? - J'ai besoin de lire ligne par ligne, enregistrer le last_pos quelque part, fermez le fichier, aller et ouvrir le fichier, chercher les last_pos, lire la ligne, mise à jour de la last_pos, fermez le fichier...
- si vous êtes à la transmission des données entre les sous-processus, regardez StringIO etc. Ou envisager d'utiliser une base de données MySQL par exemple
Vous devez vous connecter pour publier un commentaire.
ok, vous pouvez utiliser ceci:
rappelez-vous juste,
last_pos
n'est pas un numéro de ligne dans votre fichier, c'est un décalage d'octets à partir du début du fichier -- il n'y a pas de point dans l'incrémenter/décrémenter.last_pos
, qui contient le courant de décalage d'octet à partir du début du fichier. vous ouvrez le fichier,seek()
à celle de l'offset, puis lire une ligne à l'aide dereadline()
. pointeur de fichier avance automatiquement au début de la ligne suivante. ensuite, vous utiliseztell()
pour obtenir le nouveau décalage et l'enregistrer à l'last_pos
à être utilisé sur la prochaine itération. s'il vous plaît, indiquer le cadre de ce processus n'est pas clair, je vais essayer d'expliquer plus en détails.readlines
n'est pas une faute de frappe, c'est une autre méthode mise en œuvre (doc)Est-il une raison pourquoi vous devez utiliser f.dire et f.chercher? Le fichier objet en Python est itératif - ce qui signifie que vous pouvez passer en boucle un fichier de lignes en natif sans avoir à se soucier d'autre chose:
Un moyen pour obtenir la position actuelle Lorsque vous souhaitez modifier une ligne spécifique d'un fichier:
De sauter des lignes à l'aide de islice fonctionne parfaitement pour moi et ressemble plus proche de ce que vous recherchez (saut à la ligne dans le fichier):
Où last_pos est la ligne que vous avez arrêté la lecture de la dernière fois. Il va commencer l'itération d'une ligne après last_pos.