Сопоставьте последнее слово и удалите всю строку

Файл Input.txt

12626232 : Bookmarks 
1321121:
126262   

Здесь 126262: может быть любым текстом или цифрой, поэтому в основном будет искать последнее слово: (двоеточие) и удалять всю строку

Выходной файл.txt

12626232 : Bookmarks 

Мой код:

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

Проблема: когда я совпадаю с : он удаляет всю строку, но я просто хочу проверить, существует ли она в конце строки, и если это конец строки, то удалить только всю строку. Любое предложение будет оценено. Спасибо.

Я видел следующее, но не уверен, как его использовать здесь

a = "abc here we go:"
print a[:-1]

person Community    schedule 29.05.2013    source источник


Ответы (4)


Я считаю, что с этим вы должны быть в состоянии достичь того, что вы хотите.

with open(fname) as f:
    lines = f.readlines()
    for line in lines:
        if not line.strip().endswith(':'):
            print line

Здесь fname — это переменная, указывающая на расположение файла.

person aa8y    schedule 29.05.2013
comment
Я тоже брат. Рад, что смог помочь. - person aa8y; 29.05.2013

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

def function_example():
    fn = 'input.txt'
    f = open(fn)
    output = []
    for line in f:
        if not line.strip().endswith(":"):  # This is what you were missing
            output.append(line)
    f.close()
    f = open(fn, 'w')
    f.writelines(output)
    f.close()

Вы могли бы также сделать if not line.strip()[:-1] == ':':, но endswith() лучше подходит для ваш вариант использования.

Вот компактный способ сделать то, что вы делаете выше:

def function_example(infile, outfile, limiter=':'):
    ''' Filters all lines in :infile: that end in :limiter:
        and writes the remaining lines to :outfile: '''

    with open(infile) as in, open(outfile,'w') as out:
       for line in in:
         if not line.strip().endswith(limiter):
              out.write(line)

with оператор создает контекст и автоматически закрывает файлы, когда блок заканчивается.

person Burhan Khalid    schedule 29.05.2013
comment
@Buhan Khalid, спасибо за хорошее решение. Как насчет того, чтобы удалить конец строки только цифрой (последняя строка входного файла). Должен ли я использовать регулярное выражение? или есть встроенная функция? - person ; 29.05.2013
comment
Если вы хотите удалить строку, последним символом которой является цифра, добавьте line.strip()[:-1].isdigit() также к if. - person Burhan Khalid; 29.05.2013

Чтобы найти последнюю букву: выполните следующие действия.

if line.strip().endswith(':'):
    ...Do Something...
person spicavigo    schedule 29.05.2013

Вы можете использовать обычное выражениеn

import re

#Something end with ':'
regex = re.compile('.(:+)')
new_lines = []
file_name = "path_to_file"

with open(file_name) as _file:
    lines = _file.readlines()
    new_lines = [line for line in lines if regex.search(line.strip())]

with open(file_name, "w") as _file:
    _file.writelines(new_lines)
person kadi    schedule 29.05.2013