2013-04-15 2 views
0

У меня есть файлы журналов (названные в формате YYMMDD), и я хотел бы создать скрипт, который получает только важную информацию из файлов (например, строки, содержащие «O: NVS: VOICE "). Я никогда раньше не использовал Python, поэтому, пожалуйста, помогите!Python читает файлы журналов и получает строки, содержащие конкретные слова

+1

Нам нужно некоторое представление о том, что вы уже пробовали и где у вас проблемы. Вам нужна помощь в открытии файла? Разбор данных, которые есть? Печатать/записывать интересующую вас информацию? – thegrinner

+0

ну, на самом деле, я только что начал свой проект в python, поэтому я все еще думаю о решении, я хотел бы получить некоторые идеи от людей, у которых есть опыт .. сценарий нацелен на то, чтобы получить подобное, что называет конкретные слова как i сказал, из файлов журнала, которые ежедневно генерируются сервером, а затем помещают их в базу данных mysql, поэтому я не знаю, как я могу получить строки, так как их много, и они создаются ежедневно. –

ответ

10

Это поможет вам начать хорошо:

infile = r"D:\Documents and Settings\xxxx\Desktop\test_log.txt" 

important = [] 
keep_phrases = ["test", 
       "important", 
       "keep me"] 

with open(infile) as f: 
    f = f.readlines() 

for line in f: 
    for phrase in keep_phrases: 
     if phrase in line: 
      important.append(line) 
      break 

print(important) 

Ни в коем случае не совершенны, например, нет обработки исключений или шаблон согласования, но вы можете добавить их к нему довольно легко. Посмотрите на регулярные выражения, которые могут быть лучше, чем сопоставление фразы. Если ваши файлы очень большие, прочитайте их по очереди, чтобы избежать MemoryError.

входного файла:

This line is super important! 
don't need this one... 
keep me! 
bla bla 
not bothered 
ALWAYS include this test line 

Выход:

['This line is super important!\n', 'keep me!\n', 'ALWAYS include this test line'] 

Примечание: Это Python 3.3. Вам потребуется изменить инструкцию печати (удалить скобки), если вы используете 2.7.

+0

Вы можете избежать проблемы с большими файлами, зацикливаясь над файловым объектом, а не на вызовы readlines. Просто переместите свой 'for line in f' внутри' with' и избавьтесь от 'f.readlines()' –

10

Вы должны будете знать, как loop over files in a directory, regular expressions to make sure your log file format matches to file you are looping over, how to open a file, how to loop over the lines in the open file и how to check if one of those lines contains what you are looking for.

И вот какой-то код, чтобы вы начали.

with open("log.log" 'r') as f: 
    for line in f: 
     if "O:NVS:VOICE" in line: 
      print line 
Смежные вопросы