Supprimer une ligne d'un fichier en Python

j'essaie de supprimer une ligne spécifique qui contient une chaîne spécifique.

j'ai un fichier appelé nombres.txt avec le contenu suivant:

pierre

tom

tom1

yan

Ce que je veux supprimer, c'est que tom dans le fichier, j'ai donc fait cette fonction:

def deleteLine():
fn = 'numbers.txt'
f = open(fn)
output = []
for line in f:
    if not "tom" in line:
        output.append(line)
f.close()
f = open(fn, 'w')
f.writelines(output)
f.close()

La sortie est:

pierre

yan

Comme vous pouvez le voir, le problème est que la fonction de suppression tom et tom1, mais je ne veux pas supprimer tom1. Je veux supprimer tom. C'est la sortie que je veux avoir:

pierre

tom1

yan

N'importe quelles idées pour changer la fonction pour faire ceci correctement?

10
demandé sur Brian Tompsett - 汤莱恩 2011-05-10 13:14:43

5 réponses

modifier la ligne:

    if not "tom" in line:

à:

    if "tom" != line.strip():
12
répondu Matic 2011-05-10 09:18:43

C'est parce que

if not "tom" in line

vérifie, si tom n'est pas une sous-chaîne de l'actuel line. Mais dans tom1,tom une sous-chaîne. Ainsi, il est supprimé.

probablement, Vous pourriez voulez que l'un des éléments suivants:

if not "tom\n"==line # checks for complete (un)identity
if "tom\n" != line # checks for complete (un)identity, classical way
if not "tom"==line.strip() # first removes surrounding whitespace from `line`
4
répondu phimuemue 2011-05-10 10:20:36

juste pour le plaisir, voici un deux-doublure pour le faire.

lines = filter(lambda x:x[0:-1]!="tom", open("names.txt", "r"))
open("names.txt", "w").write("".join(lines))

Défi: quelqu'un poste un one-liner pour cela.

import fileinput
for l in fileinput.input("names.txt", inplace=1):
    if l != "tom\n": print l[:-1]
3
répondu Bemmu 2011-05-10 09:48:10

Vous pouvez utiliser les regex.

import re
if not re.match("^tom$", line):
    output.append(line)

$ signifie la fin de la chaîne.

1
répondu riza 2011-05-11 20:29:26

je suis nouveau dans la programmation et python (quelques mois)... c'est ma solution:

import fileinput

c = 0 # counter
for line in fileinput.input("korrer.csv", inplace=True, mode="rb"):
    # the line I want to delete
    if c == 3: 
        c += 1
        pass
    else:
        line = line.replace("\n", "")
        print line
        c +=1

je suis sûr qu'il y a un moyen plus simple, juste c'est une idée. (mon anglais n'est pas très bon à la recherche!!)

0
répondu koxmoz 2014-08-30 15:19:20