Удаление строки из файла в Python - PullRequest
10 голосов
/ 10 мая 2011

Я пытаюсь удалить определенную строку, которая содержит определенную строку.

У меня есть файл с именем numbers.txt со следующим содержимым:

питер
Том
tom1
янь

Что я хочу удалить, так это Том из файла, поэтому я сделал эту функцию:

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()

Вывод:

питер
янь

Как видите, проблема в том, что функция delete tom и tom1 , но я не хочу удалять tom1 . Я хочу удалить только Том . Вот вывод, который я хочу получить:

питер
tom1
янь

Есть идеи, как изменить функцию, чтобы сделать это правильно?

Ответы [ 5 ]

12 голосов
/ 10 мая 2011

изменить строку:

    if not "tom" in line:

до:

    if "tom" != line.strip():
4 голосов
/ 10 мая 2011

Это потому что

if not "tom" in line

проверяет, не является ли tom подстрокой текущего line. Но в tom1, tom является подстрокой. Таким образом, он удаляется.

Возможно, вы захотите одно из следующего:

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`
3 голосов
/ 10 мая 2011

Просто для удовольствия, вот два строчки, чтобы сделать это.

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

Задача: кто-то разместит однострочник для этого.

Вы также можете использовать модуль fileinput дляполучить, пожалуй, самый читаемый результат:

import fileinput
for l in fileinput.input("names.txt", inplace=1):
    if l != "tom\n": print l[:-1]
1 голос
/ 10 мая 2011

Вы можете использовать регулярное выражение.

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

$ означает конец строки.

0 голосов
/ 30 августа 2014

Я новичок в программировании и Python (несколько месяцев) ... это мое решение:

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

Я уверен, что есть более простой способ, просто это идея. (мой английский не очень хорошо выглядит !!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...