web-dev-qa-db-fra.com

Comment ajoutez-vous un fichier en Python?

Comment ajoutez-vous au fichier au lieu de l'écraser? Existe-t-il une fonction spéciale qui s’ajoute au fichier?

1298
user502039
with open("test.txt", "a") as myfile:
    myfile.write("appended text")
2063
Petter

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

Lorsque vous ouvrez avec un mode "a", la position d'écriture sera toujours à la fin du fichier (un ajout). Vous pouvez ouvrir avec "a +" pour permettre la lecture, rechercher en arrière et lire (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'

Remarque : Utiliser 'a' n'est pas la même chose que s'ouvrir avec 'w' et chercher jusqu'à la fin du fichier - réfléchissez à ce qui pourrait arriver si un autre programme ouvert le fichier et a commencé à écrire entre la recherche et l’écriture. Sur certains systèmes d’exploitation, l’ouverture du fichier avec "a" garantit que toutes vos écritures suivantes seront ajoutées de manière atomique à la fin du fichier (même si le fichier se développe d’autres écritures).


Quelques détails supplémentaires sur le fonctionnement du mode "a" ( testé uniquement sous Linux ). Même si vous revenez en arrière, chaque écriture s’ajoute à 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 fopenpage de manuel indique:

L'ouverture d'un fichier en mode ajout (a comme premier caractère du mode) entraîne l'exécution de toutes les opérations d'écriture ultérieures dans ce flux en fin de fichier, comme si elles étaient précédées de l'appel:

fseek(stream, 0, SEEK_END);

Ancienne réponse simplifiée (n'utilisant pas with):

Exemple: ( dans un programme réel utilisez with pour fermer le fichier - voir la documentation)

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

Je fais toujours ça,

f = open('filename.txt', 'a')
f.write("stuff")
f.close()

C'est simple, mais très utile.

36
Seth Connell

Vous voudrez probablement passer "a" comme argument de mode. Voir la documentation pour open () .

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

Il existe d'autres permutations de l'argument mode pour la mise à jour (+), la troncature (w) et le mode binaire (b), mais commencer uniquement par "a" est votre meilleur choix.

33
istruble

Python a de nombreuses variantes des trois modes principaux. Ces trois modes sont:

'w'   write text
'r'   read text
'a'   append text

Donc, pour ajouter à un fichier c'est aussi simple que:

f = open('filename.txt', 'a') 
f.write('whatever you want to write here (in append mode) here.')

Ensuite, il y a les modes qui rendent juste votre code moins de lignes:

'r+'  read + write text
'w+'  read + write text
'a+'  append + read text

Enfin, il existe les modes de lecture/écriture au format binaire: 

'rb'  read binary
'wb'  write binary
'ab'  append binary
'rb+' read + write binary
'wb+' read + write binary
'ab+' append + read binary
21
Cleve Green

lorsque nous utilisons cette ligne open(filename, "a"), que a indique l’ajout du fichier, c’est-à-dire permettre l’insertion de données supplémentaires dans le fichier existant.

Vous pouvez simplement utiliser les lignes suivantes pour ajouter le texte dans votre fichier

def FileSave(filename,content):
    with open(filename, "a") as myfile:
        myfile.write(content)

FileSave("test.txt","test1 \n")
FileSave("test.txt","test2 \n")
11
K.Suthagar

si vous voulez ajouter à un fichier 

with open("test.txt", "a") as myfile:
    myfile.write("append me")

Nous avons déclaré la variable myfile pour ouvrir un fichier nommé test.txt. Open prend 2 arguments, le fichier que nous voulons ouvrir et une chaîne qui représente le type de permission ou d'opération que nous voulons effectuer sur le fichier.

voici les options de mode de fichier

 Description du mode 

 'R' C'est le mode par défaut. Il ouvre le fichier pour la lecture .
 'W' ce mode ouvre le fichier pour l'écriture. 
 Si le fichier n'existe pas, il crée un nouveau fichier .
 Si le fichier existe, il tronque le fichier .
 'X' Crée un nouveau fichier. Si le fichier existe déjà, l'opération échoue .
 'A' Ouvrir le fichier en mode ajout. 
 Si le fichier n'existe pas, il crée un nouveau fichier .
 'T' Ceci est le mode par défaut. Il s'ouvre en mode texte .
 'B' Ceci s'ouvre en mode binaire .
 '+' Ceci ouvrira un fichier en lecture et en écriture (mise à jour) 
1
nima_moradi

Le paramètre 'a' signifie le mode Ajout. Si vous ne voulez pas utiliser with open à chaque fois, vous pouvez facilement écrire une fonction pour le faire pour vous:

def append(txt='\nFunction Successfully Executed', file):
    with open(file, 'a') as f:
        f.write(txt)

Si vous voulez écrire ailleurs que la fin, vous pouvez utiliser 'r+':

import os

with open(file, 'r+') as f:
    f.seek(0, os.SEEK_END)
    f.write("text to add")

Enfin, le paramètre 'w+' accorde encore plus de liberté. Plus précisément, il vous permet de créer le fichier s’il n’existe pas, ainsi que de vider le contenu d’un fichier existant.


Le crédit pour cette fonction est attribué à @Primusa

1
Alec Alameddine

Vous pouvez également ouvrir le fichier en mode r+, puis définir la position du fichier à la fin du fichier.

import os

with open('text.txt', 'r+') as f:
    f.seek(0, os.SEEK_END)
    f.write("text to add")

L'ouverture du fichier en mode r+ vous permettra d'écrire sur d'autres positions de fichier que la fin, tandis que a et a+ forceront l'écriture à la fin.

0
Primusa