Удаление строки из файла в Python
Я пытаюсь удалить определенную строку, содержащую определенную строку.
У меня есть файл с названием цифры.txt следующего содержания:
Петр
Тома
том1
Ян!--9-->
что я хочу удалить это Тома из файла, поэтому я сделал эту функцию:
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()
выход:
Петр
Ян!--9-->
Как вы можете видеть, проблема в том, что функция удалить Тома и tom1, но я не хочу, чтобы удалить tom1. Я хочу удалить только Тома. Это результат, который я хочу иметь:
Петр
том1
Ян!--9-->
есть идеи изменить функцию, чтобы сделать это правильно?
5 ответов
потому что
if not "tom" in line
проверяет, является ли tom
не является подстрокой ток line
. Но в tom1
, tom
is подстроки. Таким образом, он удаляется.
вы, вероятно, могли бы хотеть одно из следующих:
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`
просто для удовольствия, вот два вкладыша, чтобы сделать это.
lines = filter(lambda x:x[0:-1]!="tom", open("names.txt", "r"))
open("names.txt", "w").write("".join(lines))
Challenge: кто-то опубликовать однострочный для этого.
вы также можете использовать модуль fileinput для получения наиболее читаемого результата:
import fileinput
for l in fileinput.input("names.txt", inplace=1):
if l != "tom\n": print l[:-1]
Вы можете использовать regex.
import re
if not re.match("^tom$", line):
output.append(line)
на $
означает конец строки.
Я новичок в программировании и python (несколько месяцев)... вот мое решение:--2-->
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
Я уверен, что есть простой способ, просто это идея. (мой английский не очень хорошо выглядит!!)