Comment lire depuis un fichier ouvert en mode “a +”?

Par définition, le mode “a +” ouvre le fichier à la fois pour l’ajout et la lecture. Les travaux annexes, mais quelle est la méthode de lecture? J’ai fait quelques recherches, mais je n’ai pas pu le trouver clarifié nulle part.

f=open("myfile.txt","a+") print (f.read()) 

Essayé cela, il imprime en blanc.

Utilisez f.seek() pour définir le décalage du fichier au début du fichier.

Remarque: Avant Python 2.7, il y avait un bogue qui empêchait certains systèmes d’exploitation d’avoir toujours la position du fichier sur la fin du fichier. Cela pourrait amener certains utilisateurs à faire fonctionner votre code d’origine. Par exemple, sur CentOS 6, votre code aurait fonctionné comme vous le souhaitiez, mais pas comme il se doit.

 f = open("myfile.txt","a+") f.seek(0) print f.read() 

Lorsque vous ouvrez le fichier en utilisant f=open(myfile.txt,"a+") , le fichier peut être lu et écrit.

Par défaut, le descripteur de fichier pointe au début du fichier,

Ceci peut être déterminé par f.tell() qui sera 0L .

 In [76]: f=open("myfile.txt","a+") In [77]: f.tell() Out[77]: 0L In [78]: f.read() Out[78]: '1,2\n3,4\n' 

Cependant, f.write se chargera de déplacer le pointeur sur la dernière ligne avant d’écrire.

MODES r + lecture et écriture Commence au début du fichier r lecture seule Démarre au début du fichier a + Read / Append. Conserve le contenu du fichier en écrivant à la fin du fichier

Bonne chance! Isabel Ruiz

Il y a encore des bizarreries dans les nouvelles versions de Python qui dépendent du système d’exploitation et elles sont dues à des différences d’implémentation de la fonction fopen () dans stdio.

L’ man fopen de Linux man fopen :

a + – Ouvert pour la lecture et l’ajout (écriture en fin de fichier). Le fichier est créé s’il n’existe pas. La position initiale du fichier pour la lecture est au début du fichier, mais la sortie est toujours ajoutée à la fin du fichier.

OS X:

«a +» – Ouvert pour lire et écrire. Le fichier est créé s’il n’existe pas. Le stream est positionné à la fin du fichier. Les écritures ultérieures dans le fichier se termineront toujours à la fin du fichier en cours, indépendamment de toute fseek (3) ou similaire.

MSDN n’indique pas vraiment où le pointeur est initialement défini, mais simplement qu’il se déplace à la fin des écritures.

Lorsqu’un fichier est ouvert avec le type d’access “a” ou “a +”, toutes les opérations d’écriture ont lieu à la fin du fichier. Le pointeur de fichier peut être repositionné à l’aide de fseek ou rewind, mais il est toujours renvoyé à la fin du fichier avant toute opération d’écriture. Ainsi, les données existantes ne peuvent pas être écrasées.

La réplication des différences sur différents systèmes avec Python 2.7.x et 3k est assez simple avec .open .tell

Lorsque vous traitez quelque chose via le système d’exploitation, il est plus prudent de prendre des précautions, comme l’utilisation d’une recherche explicite .seek(0) .