77 votes

Ajouter une ligne au début d'un fichier

Je peux le faire en utilisant un fichier séparé, mais comment ajouter une ligne au début d'un fichier ?

 f=open('log.txt','a')
f.seek(0) #get to the first position
f.write("text")
f.close()

Cela commence à écrire à partir de la fin du fichier puisque le fichier est ouvert en mode ajout.

16voto

NPE Points 169956

Dans tous les systèmes de fichiers que je connais, vous ne pouvez pas le faire sur place. Vous devez utiliser un fichier auxiliaire (que vous pouvez ensuite renommer pour reprendre le nom du fichier d'origine).

15voto

jeffpkamp Points 1097

Pour mettre du code dans la réponse de NPE, je pense que le moyen le plus efficace de le faire est :

 def insert(originalfile,string):
    with open(originalfile,'r') as f:
        with open('newfile.txt','w') as f2: 
            f2.write(string)
            f2.write(f.read())
    os.rename('newfile.txt',originalfile)

9voto

lloyd Points 91

Idée différente :

(1) Vous enregistrez le fichier d'origine en tant que variable.

(2) Vous écrasez le fichier d'origine avec de nouvelles informations.

(3) Vous ajoutez le fichier d'origine dans les données sous les nouvelles informations.

Code:

 with open(<filename>,'r') as contents:
      save = contents.read()
with open(<filename>,'w') as contents:
      contents.write(< New Information >)
with open(<filename>,'a') as contents:
      contents.write(save)

3voto

Mark Ransom Points 132545

Il n'y a aucun moyen de le faire avec des fonctions intégrées, car ce serait terriblement inefficace. Vous devrez déplacer le contenu existant du fichier vers le bas chaque fois que vous ajoutez une ligne au début.

Il existe un utilitaire Unix/Linux tail qui peut lire à partir de la fin d'un fichier. Peut-être que vous pouvez trouver cela utile dans votre application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X