2014-09-09 4 views
-2

Я хотел бы, чтобы удалить ведущие символы из каждой строки этого файла, пока я не нашел цифру:Удалите ведущие символы Python

файла выглядит следующим образом:

* Fail 63779 - Error A 
* Fail 64969 - Error B 
* Fail 61529 - Error C 
* Fail 65068 - Error D 

Мой выход должен быть, как показано ниже:

63779 - Error A 
64969 - Error B 
61529 - Error C 
65068 - Error D 

Это woule быть еще лучше, если я получаю этот выход в порядке возрастания номеров FAIL:

61529 - Error C 
63779 - Error A 
64969 - Error B 
65068 - Error D 
+0

В чем ваш вопрос? –

+0

Если '* Fail' является фиксированной строкой, используйте 'my_string [7:]' – Maroun

+0

regex и сортировать? –

ответ

2

Регулярное выражение \d.* будет соответствовать первой цифре в строке до последнего символа, отличного от линии. Это означает, что вы можете использовать

with open("myfile.txt") as f: 
    lines = sorted(re.findall("\d.*", f.read())) 

, чтобы получить список строк, отсортированных лексически (не численно, так что будьте осторожны, если количество цифр меняется).

Тогда вы можете написать, что обратно в новый файл, например так:

with open("output.txt", "w") as f: 
    f.writelines(lines) 

Если вам нужно сортировать численно можно определить вспомогательную функцию

def lint(s): 
    return int(re.match(r"\d+", s).group()) 

и использовать его как это:

lines = sorted(re.findall("\d.*", f.read()), key=lint) 

Пример:

>>> s = """* Fail 63779 - Error A 
... * Fail 64969 - Error B 
... * Fail 61529 - Error C 
... * Fail 7068 - Error D""" 
>>> sorted(re.findall("\d.*", s), key=lint) 
['7068 - Error D', '61529 - Error C', '63779 - Error A', '64969 - Error B'] 
Смежные вопросы