97 votes

Modification d'une ligne spécifique dans un fichier texte en Python

Disons que j'ai un fichier texte contenant :

 Dan
Warrior
500
1
0

Existe-t-il un moyen de modifier une ligne spécifique dans ce fichier texte ? En ce moment j'ai ça :

 #!/usr/bin/env python
import io

myfile = open('stats.txt', 'r')
dan = myfile.readline()
print dan
print "Your name: " + dan.split('\n')[0]

try:
    myfile = open('stats.txt', 'a')
    myfile.writelines('Mage')[1]
except IOError:
        myfile.close()
finally:
        myfile.close()

Oui, je sais que myfile.writelines('Mage')[1] est incorrect. Mais vous comprenez mon point, n'est-ce pas? J'essaie de modifier la ligne 2 en remplaçant Warrior par Mage. Mais est-ce que je peux même faire ça ?

138voto

Jochen Ritzel Points 42916

Vous voulez faire quelque chose comme ceci :

 # with is like your try .. finally block in this case
with open('stats.txt', 'r') as file:
    # read a list of lines into data
    data = file.readlines()

print data
print "Your name: " + data[0]

# now change the 2nd line, note that you have to add a newline
data[1] = 'Mage\n'

# and write everything back
with open('stats.txt', 'w') as file:
    file.writelines( data )

La raison en est que vous ne pouvez pas faire quelque chose comme "changer la ligne 2" directement dans un fichier. Vous ne pouvez écraser (pas supprimer) des parties d'un fichier - cela signifie que le nouveau contenu ne couvre que l'ancien contenu. Donc, si vous écriviez 'Mage' sur la ligne 2, la ligne résultante serait 'Mageior'.

29voto

alpha123 Points 3600
def replace_line(file_name, line_num, text):
    lines = open(file_name, 'r').readlines()
    lines[line_num] = text
    out = open(file_name, 'w')
    out.writelines(lines)
    out.close()

Et alors:

 replace_line('stats.txt', 0, 'Mage')

25voto

ghostdog74 Points 86060

vous pouvez utiliser fileinput pour faire l'édition sur place

 import fileinput
for  line in fileinput.FileInput("myfile", inplace=1):
    if line .....:
         print line

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