Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Python удаление строки из файла  (Прочитано 12043 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн nightmaredess

  • Автор темы
  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Python удаление строки из файла
« : 04 Апреля 2011, 20:30:11 »
Как удалить строку из файла? Содержание строки извесно. Например:
Содержание файла:
qwe
sd
werewr
sasd
sad

нужно удалить строку sasd

Помогите плиз!

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: Python удаление строки из файла
« Ответ #1 : 05 Апреля 2011, 07:10:15 »
Задачка для первоклассника. Вот тебе решение (одно из нескольких):

from subprocess import call
call('grep -v sasd', shell=True)
;)
« Последнее редактирование: 05 Апреля 2011, 07:12:05 от Мангуст »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Python удаление строки из файла
« Ответ #2 : 05 Апреля 2011, 10:28:05 »
TC.
Вот Вам решение.
1. Прочесть файл построчно.
2. Искать индексы строк где шаблон совпадает.
3. Переписать файл без строк с найденными индексами.
ЗЫ. Включайте моск. ;D

Оффлайн nightmaredess

  • Автор темы
  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
Re: Python удаление строки из файла
« Ответ #3 : 05 Апреля 2011, 12:49:50 »
Спасибо огромное за решение! Задачка простая я согласен и было несколько решений но работали достаточно медленно.

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: Python удаление строки из файла
« Ответ #4 : 05 Апреля 2011, 15:21:25 »
Если ты о моем "решении", то это скорее была шутка (хотя решение и рабочее). Тебе нужно что-то вроде:

def remove_string(filename, string):

    with open(filename) as fd:
        for line in fd:
            line = line.rstrip('\n');
            if line != string:
                print line

Но эта функция выдает результат на стандартный вывод, не удаляя ничего из файла. Если надо удалить из файла, то можно либо использовать временный файл вроде:

import os
def remove_string2(filename, string):

    tempname = filename + '.temp' # os.tempnam() gives warning

    with open(filename) as fin:             # python 2.6
        with open(tempname, 'w') as fout:   # compatible
            for line in fin:
                line = line.rstrip('\n');
                if line != string:
                    fout.write(line + '\n')

    os.rename(tempname, filename)

Или прочитать весь файл в память целиком, обработать и перезаписать результат в исходный файл:

def remove_string3(filename, string):

    rst = []

    with open(filename) as fd:
        t = fd.read()
        for line in t.splitlines():
            if line != string:
                rst.append(line)

    with open(filename, 'w') as fd:
        fd.write('\n'.join(rst))
        fd.write('\n') # with join we lose the last newline char

 

Страница сгенерирована за 0.028 секунд. Запросов: 26.