Question Comment vous ajoutez à un fichier?


Comment ajouter au fichier au lieu de l'écraser? Y a-t-il une fonction spéciale qui s'ajoute au fichier?


1186
2018-01-16 16:20


origine


Réponses:


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

1887
2018-01-16 16:24



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

Lorsque vous ouvrez avec "un" mode, la position d'écriture sera toujours être à la fin du fichier (un append). Vous pouvez ouvrir avec "a +" pour permettre la lecture, chercher 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 d'ouvrir avec 'w' et chercher la fin du fichier - réfléchissez à ce qui pourrait arriver 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 vos écritures suivantes seront ajoutées de manière atomique à la fin du fichier (même si le fichier se développe par d'autres écritures).


Quelques détails supplémentaires sur le fonctionnement du mode "a" (testé sur Linux seulement). Même si vous revenez, chaque écriture s'ajoutera à 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, le fopen  page de manuel États:

Ouvrir un fichier en mode ajout (un comme premier caractère du mode)   provoque toutes les opérations d'écriture ultérieures à ce flux à se produire à   fin de fichier, comme si précédé l'appel:

fseek(stream, 0, SEEK_END);

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

Exemple: (dans un vrai programme utilisation with pour fermer le fichier - voir La documentation)

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

160
2018-01-16 16:23



Je fais toujours ça,

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

C'est simple, mais très utile.


34
2017-11-09 20:57



Vous voulez probablement passer "a" comme argument de mode. Voir les documents pour ouvrir().

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

Il existe d'autres permutations de l'argument mode pour la mise à jour (+), le tronquage (w) et le mode binaire (b) mais en commençant par "a" est votre meilleur pari.


32
2018-01-16 16:31



quand nous utilisons cette ligne open(filename, "a"), cette a indique l'ajout du fichier, ce qui signifie permettre d'insérer des 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")

10
2017-12-29 15:51



Python a beaucoup de variations sur les trois principaux modes, 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 font que votre code est moins nombreux:

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

Enfin, il y a 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

10
2017-10-27 17:27



Voici mon script, qui compte essentiellement le nombre de lignes, puis ajoute, puis les compte à nouveau afin que vous ayez des preuves que cela a fonctionné.

shortPath  = "../file_to_be_appended"
short = open(shortPath, 'r')

## this counts how many line are originally in the file:
long_path = "../file_to_be_appended_to" 
long = open(long_path, 'r')
for i,l in enumerate(long): 
    pass
print "%s has %i lines initially" %(long_path,i)
long.close()

long = open(long_path, 'a') ## now open long file to append
l = True ## will be a line
c = 0 ## count the number of lines you write
while l: 
    try: 
        l = short.next() ## when you run out of lines, this breaks and the except statement is run
        c += 1
        long.write(l)

    except: 
        l = None
        long.close()
        print "Done!, wrote %s lines" %c 

## finally, count how many lines are left. 
long = open(long_path, 'r')
for i,l in enumerate(long): 
    pass
print "%s has %i lines after appending new lines" %(long_path, i)
long.close()

-4
2017-08-31 22:19