Cela provenant du didacticiel peut également être utile.
Dan
28
J'ai remarqué que beaucoup de gens utilisent la with open(file, "a")méthode. Je suis peut-être démodé, mais quel est l'avantage suropen(file, "a") ... file.close()
75
bluewoodtree: Les avantages sont similaires à ceux de RAII en C ++. Si vous oubliez close (), cela peut prendre un certain temps avant que le fichier ne soit réellement fermé. Il est plus facile de penser à l'oublier lorsque le code a plusieurs points de sortie, des exceptions, etc.
Petter
54
print("appended text", file=myfile)est également possible, pour une API plus familière.
Thomas Ahle
206
Vous devez ouvrir le fichier en mode ajout, en définissant "a" ou "ab" comme mode. Voir open () .
Lorsque vous ouvrez avec le mode "a", la position d'écriture sera toujours à la fin du fichier (un ajout). Vous pouvez ouvrir avec "a +" pour permettre la lecture, la recherche en arrière et la lecture (mais toutes les écritures seront toujours à la fin du fichier!).
Remarque : L'utilisation de 'a' n'est pas la même chose que l'ouverture avec 'w' et la recherche à 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 atomiquement à 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 uniquement ). Même si vous cherchez en arrière, 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'
L'ouverture d'un fichier en mode ajout (a comme premier caractère du mode) provoque toutes les opérations d'écriture suivantes dans ce flux à la fin du fichier, comme si elles avaient précédé l'appel:
fseek(stream,0, SEEK_END);
Ancienne réponse simplifiée (ne pas utiliser with):
Exemple: ( dans un programme réel, utilisez withpour fermer le fichier - voir la documentation )
c'est un peu plus agréable et un peu plus sûr d'écrire: avec open ('filename', 'a') comme f: f.write ('stuff')
Sam Redway
35
Vous voulez probablement passer "a"comme argument de mode. Voir les documents 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 avec juste "a"est votre meilleur pari.
lorsque nous utilisons cette ligne open(filename, "a"), qui aindique l'ajout du fichier, cela 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
Vous pouvez également ouvrir le fichier en r+mode, 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")
Ouverture du fichier en r+mode vous permettre d' écrire à d' autres postes de fichiers en dehors de la fin, alors que aet l' a+écriture de force à la fin.
with open("test.txt","a")as myfile:
myfile.write("append me")
Nous avons déclaré la variable myfilepour ouvrir un fichier nommétest.txt . Ouvrir prend 2 arguments, le fichier que nous voulons ouvrir et une chaîne qui représente les types de permission ou d'opération que nous voulons faire sur le fichier
voici les options du mode 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 un fichier en mode ajout.
Si le fichier n'existe pas, il crée un nouveau fichier.
't' C'est le mode par défaut. Il s'ouvre en mode texte.
'b' Cela s'ouvre en mode binaire.
'+' Cela ouvrira un fichier pour la lecture et l'écriture (mise à jour)
Le 'a'paramètre signifie le mode d'ajout. Si vous ne souhaitez pas utiliser à with openchaque fois, vous pouvez facilement écrire une fonction pour le faire pour vous:
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 'w+'paramètre 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 qui existe actuellement.
"file.close" est automatiquement appelé à la fin du bloc "with", ce qui est l'avantage du mot-clé. Le PO a également demandé l'ouverture d'un fichier à ajouter. Le mode "+" n'est pas nécessaire, sauf si vous souhaitez également lire.
Erik Knowles
-6
Voici mon script, qui compte essentiellement le nombre de lignes, puis les ajoute, puis les compte à nouveau pour 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):passprint"%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 writewhile 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):passprint"%s has %i lines after appending new lines"%(long_path, i)
long.close()
with open(file, "a")
méthode. Je suis peut-être démodé, mais quel est l'avantage suropen(file, "a") ... file.close()
print("appended text", file=myfile)
est également possible, pour une API plus familière.Vous devez ouvrir le fichier en mode ajout, en définissant "a" ou "ab" comme mode. Voir open () .
Lorsque vous ouvrez avec le mode "a", la position d'écriture sera toujours à la fin du fichier (un ajout). Vous pouvez ouvrir avec "a +" pour permettre la lecture, la recherche en arrière et la lecture (mais toutes les écritures seront toujours à la fin du fichier!).
Exemple:
Remarque : L'utilisation de 'a' n'est pas la même chose que l'ouverture avec 'w' et la recherche à 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 atomiquement à 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 uniquement ). Même si vous cherchez en arrière, chaque écriture s'ajoutera à la fin du fichier:
En fait, la
fopen
page de manuel déclare:Ancienne réponse simplifiée (ne pas utiliser
with
):Exemple: ( dans un programme réel, utilisez
with
pour fermer le fichier - voir la documentation )la source
Je fais toujours ça,
C'est simple, mais très utile.
la source
Vous voulez probablement passer
"a"
comme argument de mode. Voir les documents pour open () .Il existe 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 meilleur pari.la source
file
associe une fonction intégrée. Ne l'utilisez pas pour les variables.file
n'est plus un module intégré dans Python 3. Même dans Python 2, il est très rarement utilisé . L'ouverture d'un fichier est une opération courante. Il est correct d'utiliser lefile
nom ici sur Python 2 et 3. Sachez quand être incohérent.Python a de nombreuses variantes des trois principaux modes, ces trois modes sont:
Donc, pour ajouter à un fichier, c'est aussi simple que:
Ensuite, il y a les modes qui rendent votre code moins de lignes:
Enfin, il existe les modes de lecture / écriture au format binaire:
la source
lorsque nous utilisons cette ligne
open(filename, "a")
, quia
indique l'ajout du fichier, cela 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
la source
Vous pouvez également le faire avec
print
au lieu dewrite
:Si test.txt n'existe pas, il sera créé ...
la source
Vous pouvez également ouvrir le fichier en
r+
mode, puis définir la position du fichier à la fin du fichier.Ouverture du fichier en
r+
mode vous permettre d' écrire à d' autres postes de fichiers en dehors de la fin, alors quea
et l'a+
écriture de force à la fin.la source
si vous souhaitez ajouter à un fichier
Nous avons déclaré la variable
myfile
pour ouvrir un fichier nommétest.txt
. Ouvrir prend 2 arguments, le fichier que nous voulons ouvrir et une chaîne qui représente les types de permission ou d'opération que nous voulons faire sur le fichiervoici les options du mode fichier
la source
Le
'a'
paramètre signifie le mode d'ajout. Si vous ne souhaitez pas utiliser àwith open
chaque fois, vous pouvez facilement écrire une fonction pour le faire pour vous:Si vous voulez écrire ailleurs que la fin, vous pouvez utiliser
'r+'
† :Enfin, le
'w+'
paramètre 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 qui existe actuellement.† Le crédit pour cette fonction va à @Primusa
la source
La façon la plus simple d'ajouter plus de texte à la fin d'un fichier serait d'utiliser:
L' instruction
a+
dans l'open(...)
instruction indique d'ouvrir le fichier en mode ajout et autorise l'accès en lecture et en écriture.Il est également toujours recommandé
file.close()
de fermer tous les fichiers que vous avez ouverts une fois que vous avez fini de les utiliser.la source
Voici mon script, qui compte essentiellement le nombre de lignes, puis les ajoute, puis les compte à nouveau pour que vous ayez des preuves que cela a fonctionné.
la source