Я хочу отфильтровать файл журнала, чтобы все строки соответствовали определенному шаблону. Я хочу сделать это с Python.фильтровать файл журнала Linux с использованием Python
Вот моя первая попытка:
#!/usr/bin/env python
from sys import argv
script, filename = argv
with open(filename) as f:
for line in f:
try:
e = line.index("some_term_I_want_to_match")
except:
pass
else:
print(line)
Как я могу улучшить это:
- сохранить результат в новый файл аналогичного имени (то есть, другое расширение)
- использования regex, чтобы сделать его более гибким/мощным.
(я только учусь Python. Этот вопрос, как много об изучении Python как речь идет о выполнении этого конкретного результата.)
Хорошо, вот что я придумал до сих пор ... Но как сделать эквивалент предваряя в r
как в следующей строке
re.compile(r"\s*")
где строка является не строковым, а в следующей строке?
re.compile(a_string_variable)
Кроме того, я думаю, что это обновленная версия делает работу:
#!/usr/bin/env python
from sys import argv
import re
import os
import argparse #requires Python 2.7 or above
parser = argparse.ArgumentParser(description='filters a text file on the search phrase')
parser.add_argument('-s','--search', help='search phrase or keyword to match',required=True)
parser.add_argument('-f','--filename', help='input file name',required=True)
parser.add_argument('-v','--verbose', help='display output to the screen too', required=False, action="store_true")
args = parser.parse_args()
keyword = args.search
original_file = args.filename
verbose = args.verbose
base_file, ext = os.path.splitext(original_file)
new_file = base_file + ".filtered" + ext
regex_c = re.compile(keyword)
with open(original_file) as fi:
with open(new_file, 'w') as fo:
for line in fi:
result = regex_c.search(line)
if(result):
fo.write(line)
if(verbose):
print(line)
Может ли это быть легко улучшена?
Почему бы не использовать 'grep'? Если вы хотите использовать regex и настаивать на написании этого в Python, посмотрите на модуль 're'. – Blender
Не нужно «попробовать ... кроме» здесь, на мой взгляд. – squiguy
Я обновил свой вопрос. И я хочу сделать это в Python, потому что я изучаю Python. – MountainX