如何打印文件中的某个句子?
How do I print a certain sentence from a file?
我正在尝试从 python 中的外部文件打印某个句子。该文件是一个 .log 文件。
文件是这样写的:
[Mon Dec 05 14:01:48 2005] [notice] workerEnv.init() ok /etc/httpd/conf/workers2.properties
[Mon Dec 05 14:01:48 2005] [error] mod_jk child workerEnv in error state 7
我想打印第一个 [ ] 中的所有内容以及 [notice] 或 [error] 之后的所有内容。
我想我需要使用 split
命令,但我不知道如何使用。
您可以这样做,但可能不是最快的方法...
text = ['[Mon Dec 05 14:01:48 2005] [notice] workerEnv.init() ok /etc/httpd/conf/workers2.properties',
'[Mon Dec 05 14:01:48 2005] [error] mod_jk child workerEnv in error state 7']
for line in text:
kw = '[notice]' if line.find('[notice]') >= 0 else '[error]' if line.find('[error]') >= 0 else None
# Filter out every line which does not contain '[notice]' or '[error]'
if kw:
tmp = line.split(kw)
# [1:-2] is needed to get rid of the '[' and ']'
print(tmp[0][1:-2], tmp[1])
像这样的东西应该可以工作:
import re
with open('logfile.log') as logfile:
for line in map(str.strip, logfile):
m = re.findall('\[.*?\]', line)
if len(m) > 1 and m[1] in ('[notice]', '[error]'):
offset = line.find(m[1]) + len(m[1]) + 1
print(m[0], line[offset:])
注:
这里没有有效性检查。如果日志文件中的一行与问题中显示的格式不完全匹配,这可能会失败
我正在尝试从 python 中的外部文件打印某个句子。该文件是一个 .log 文件。
文件是这样写的:
[Mon Dec 05 14:01:48 2005] [notice] workerEnv.init() ok /etc/httpd/conf/workers2.properties
[Mon Dec 05 14:01:48 2005] [error] mod_jk child workerEnv in error state 7
我想打印第一个 [ ] 中的所有内容以及 [notice] 或 [error] 之后的所有内容。
我想我需要使用 split
命令,但我不知道如何使用。
您可以这样做,但可能不是最快的方法...
text = ['[Mon Dec 05 14:01:48 2005] [notice] workerEnv.init() ok /etc/httpd/conf/workers2.properties',
'[Mon Dec 05 14:01:48 2005] [error] mod_jk child workerEnv in error state 7']
for line in text:
kw = '[notice]' if line.find('[notice]') >= 0 else '[error]' if line.find('[error]') >= 0 else None
# Filter out every line which does not contain '[notice]' or '[error]'
if kw:
tmp = line.split(kw)
# [1:-2] is needed to get rid of the '[' and ']'
print(tmp[0][1:-2], tmp[1])
像这样的东西应该可以工作:
import re
with open('logfile.log') as logfile:
for line in map(str.strip, logfile):
m = re.findall('\[.*?\]', line)
if len(m) > 1 and m[1] in ('[notice]', '[error]'):
offset = line.find(m[1]) + len(m[1]) + 1
print(m[0], line[offset:])
注:
这里没有有效性检查。如果日志文件中的一行与问题中显示的格式不完全匹配,这可能会失败