在文本文件中搜索数字?
Search for number in a text file?
我尝试从我的日志文件中获取一个数字。这个数字出现在每个 "current store usage is " 之后。我怎样才能做到这一点?我可以使用 re
模块吗?
日志文件中的行
2017-05-30 12:01:03,168 | WARN | Store limit is 102400 mb (current store usage is 0 mb). The data directory: /opt/apache-activemq-5.12.0/bin/linux-x86-64/../../data only has 6887 mb of usable space - resetting to maximum available disk space: 6887 mb | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain
我的代码
def log_parser():
palab2 = "WARN"
logfile = open("/opt/apache-activemq-5.12.0/data/activemq.log", "r")
contenlog = logfile.readlines()
logfile.close()
for ligne in contenlog:
if palab2 in ligne:
print ("Probleme : " + ligne)
这对你有用:
import re
ligne = '2017-05-30 12:01:03,168 | WARN | Store limit is 102400 mb (current store usage is 0 mb). The data directory: /opt/apache-activemq-5.12.0/bin/linux-x86-64/../../data only has 6887 mb of usable space - resetting to maximum available disk space: 6887 mb | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain'
print(re.search(r'current store usage is (\d+)', ligne).group(1))
# this returns a 'string', you can convert it to 'int'
输出:
'0'
编码愉快!!!
是的,您可以使用 re
模块来大大简化这一过程。并且 +1 到 @Eric Duminil 表示不要一次读入整个文件的建议。
import re
def log_parser():
palab2 = "WARN"
logfile = "/opt/apache-activemq-5.12.0/data/activemq.log"
with open(logfile, 'r') as contenlog:
for ligne in contenlog:
if re.findall(palab2, ligne):
print ("Probleme : " + ligne)
break
试试这个:
import re
def log_parser():
with open("/opt/apache-activemq-5.12.0/data/activemq.log", "r") as logfile:
for line in logfile:
m = re.search(r"current store usage is (\d+)", line):
if m:
return m.group(1)
print(log_parser())
您没有指定您是只想要文件中的第一次出现(我假设如此)还是所有这样的行。如果是后者,只需将 return
更改为 yield
,然后像这样调用函数:print(list(log_parser()))
我尝试从我的日志文件中获取一个数字。这个数字出现在每个 "current store usage is " 之后。我怎样才能做到这一点?我可以使用 re
模块吗?
日志文件中的行
2017-05-30 12:01:03,168 | WARN | Store limit is 102400 mb (current store usage is 0 mb). The data directory: /opt/apache-activemq-5.12.0/bin/linux-x86-64/../../data only has 6887 mb of usable space - resetting to maximum available disk space: 6887 mb | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain
我的代码
def log_parser():
palab2 = "WARN"
logfile = open("/opt/apache-activemq-5.12.0/data/activemq.log", "r")
contenlog = logfile.readlines()
logfile.close()
for ligne in contenlog:
if palab2 in ligne:
print ("Probleme : " + ligne)
这对你有用:
import re
ligne = '2017-05-30 12:01:03,168 | WARN | Store limit is 102400 mb (current store usage is 0 mb). The data directory: /opt/apache-activemq-5.12.0/bin/linux-x86-64/../../data only has 6887 mb of usable space - resetting to maximum available disk space: 6887 mb | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain'
print(re.search(r'current store usage is (\d+)', ligne).group(1))
# this returns a 'string', you can convert it to 'int'
输出:
'0'
编码愉快!!!
是的,您可以使用 re
模块来大大简化这一过程。并且 +1 到 @Eric Duminil 表示不要一次读入整个文件的建议。
import re
def log_parser():
palab2 = "WARN"
logfile = "/opt/apache-activemq-5.12.0/data/activemq.log"
with open(logfile, 'r') as contenlog:
for ligne in contenlog:
if re.findall(palab2, ligne):
print ("Probleme : " + ligne)
break
试试这个:
import re
def log_parser():
with open("/opt/apache-activemq-5.12.0/data/activemq.log", "r") as logfile:
for line in logfile:
m = re.search(r"current store usage is (\d+)", line):
if m:
return m.group(1)
print(log_parser())
您没有指定您是只想要文件中的第一次出现(我假设如此)还是所有这样的行。如果是后者,只需将 return
更改为 yield
,然后像这样调用函数:print(list(log_parser()))