183 votes

Comment supprimer une ligne spécifique dans un fichier ?

Disons que j'ai un fichier texte rempli de surnoms. Comment puis-je supprimer un pseudo spécifique de ce fichier, en utilisant Python ?

1 votes

Essayez fileinput comme décrit par @j-f-sebastian aquí . Il semble vous permettre de travailler ligne par ligne, via un fichier temporaire, le tout avec une simple for la syntaxe.

1voto

Hugh Bothwell Points 22635

En général, vous ne pouvez pas ; vous devez réécrire l'ensemble du fichier (au moins du point de modification jusqu'à la fin).

Dans certains cas spécifiques, vous pouvez faire mieux que cela -

si tous vos éléments de données ont la même longueur et ne sont pas dans un ordre spécifique, et que vous connaissez le décalage de celui dont vous voulez vous débarrasser, vous pouvez copier le dernier élément sur celui à supprimer et tronquer le fichier avant le dernier élément ;

ou vous pouvez simplement écraser le morceau de données avec une valeur "c'est une mauvaise donnée, ignorez-la" ou garder un drapeau "cet élément a été supprimé" dans vos éléments de données sauvegardés de sorte que vous puissiez le marquer comme supprimé sans modifier le fichier.

C'est probablement trop pour les documents courts (moins de 100 Ko ?).

0voto

Henrique Andrade Points 187

Enregistrez les lignes du fichier dans une liste, puis retirez de la liste la ligne que vous voulez supprimer et écrivez les lignes restantes dans un nouveau fichier.

with open("file_name.txt", "r") as f:
    lines = f.readlines() 
    lines.remove("Line you want to delete\n")
    with open("new_file.txt", "w") as new_f:
        for line in lines:        
            new_f.write(line)

0 votes

Lorsqu'on donne une réponse, il est préférable de donner une explication du pourquoi de votre réponse est le bon.

0 votes

Si votre fichier ne se termine pas par une nouvelle ligne, ce code ne supprimera pas la dernière ligne même si elle contient un mot que vous voulez supprimer.

0voto

ungalcrys Points 149

Voici une autre méthode pour supprimer une/des ligne(s) d'un fichier :

src_file = zzzz.txt
f = open(src_file, "r")
contents = f.readlines()
f.close()

contents.pop(idx) # remove the line item from list, by line number, starts from 0

f = open(src_file, "w")
contents = "".join(contents)
f.write(contents)
f.close()

0voto

mrk Points 2126

Vous pouvez utiliser le re bibliothèque

En supposant que vous soyez capable de charger votre fichier txt complet. Vous définissez alors une liste de surnoms indésirables et les remplacez par une chaîne vide "".

# Delete unwanted characters
import re

# Read, then decode for py2 compat.
path_to_file = 'data/nicknames.txt'
text = open(path_to_file, 'rb').read().decode(encoding='utf-8')

# Define unwanted nicknames and substitute them
unwanted_nickname_list = ['SourDough']
text = re.sub("|".join(unwanted_nickname_list), "", text)

-1voto

Sidd501 Points 427

Voulez-vous supprimer une ligne spécifique d'un fichier, alors utilisez ce code court et simple, vous pouvez facilement supprimer toute ligne avec une phrase ou un préfixe (symbole).

with open("file_name.txt", "r") as f:
lines = f.readlines() 
with open("new_file.txt", "w") as new_f:
    for line in lines:
        if not line.startswith("write any sentence or symbol to remove line"):
            new_f.write(line)

0 votes

La seule caractéristique unique par rapport aux anciennes réponses existantes semble être l'erreur d'indentation.

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