Comment ajouter un fichier en Python ?

Comment ajouter au fichier au lieu de l'écraser ? Existe-t-il une fonction spéciale qui ajoute des données au fichier ?

Solution
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
Commentaires (16)

Vous devez ouvrir le fichier en mode append, en définissant "a" ou "ab" comme mode. Voir [open()][1].

Lorsque vous ouvrez en mode "a", la position d'écriture sera toujours à la fin du fichier (un append). Vous pouvez ouvrir avec le mode "a+" pour permettre la lecture, la recherche en arrière et la lecture (mais toutes les écritures seront toujours à la fin du fichier !).

Exemple :

>>> with open('test1','wb') as f:
        f.write('test')
>>> with open('test1','ab') as f:
        f.write('koko')
>>> with open('test1','rb') as f:
        f.read()
'testkoko'

Note : L'utilisation de 'a' n'est pas la même chose que l'ouverture avec 'w' et la recherche jusqu'à la fin du fichier - considérez ce qui pourrait se passer si un autre programme ouvrait le fichier et commençait à écrire entre la recherche et l'écriture. Sur certains systèmes d'exploitation, l'ouverture du fichier avec 'a' garantit que toutes les écritures suivantes seront ajoutées de manière atomique à la fin du fichier (même si le fichier est agrandi par d'autres écritures).


Quelques détails supplémentaires sur le fonctionnement du mode "a" (testé sur Linux uniquement). Même si vous cherchez en arrière, chaque écriture sera ajoutée à la fin du fichier :

>>> f = open('test','a+') # Not using 'with' just to simplify the example REPL session
>>> f.write('hi')
>>> f.seek(0)
>>> f.read()
'hi'
>>> f.seek(0)
>>> f.write('bye') # Will still append despite the seek(0)!
>>> f.seek(0)
>>> f.read()
'hibye'

En fait, la [page de manuel][2] de fopen déclare :

Ouvrir un fichier en mode append (a comme premier caractère de mode) l'ouverture d'un fichier en mode append (a comme premier caractère du mode) > fait que toutes les opérations d'écriture suivantes sur ce flux se produisent à la fin de fichier, comme si elles étaient précédées de l'appel :

fseek(stream, 0, SEEK_END) ;


Ancienne réponse simplifiée (sans utiliser with) :

Exemple : (dans un vrai programme utiliser with pour fermer le fichier - voir [la documentation][3])

>>> open("test","wb").write("test")
>>> open("test","a+b").write("koko")
>>> open("test","rb").read()
'testkoko'

[1] : https://docs.python.org/2/library/functions.html#open [2] : http://www.manpagez.com/man/3/fopen/ [3] : http://docs.python.org/2/whatsnew/2.6.html#pep-343-the-with-statement

Commentaires (3)

Vous voulez probablement passer "a" comme argument de mode. Voir la documentation de [open()][1].

with open("foo", "a") as f:
    f.write("cool beans...")

Il y a d'autres permutations de l'argument mode pour la mise à jour (+), la troncature (w) et le mode binaire (b) mais commencer avec juste "a" est votre meilleure chance.

[1] : http://docs.python.org/library/functions.html#open

Commentaires (2)