我的代码在不断更新的日志文件中运行。我想挑选出不必要的行,并使代码只担心3行。唯一的问题是,这3行以始终变化的时间戳开始。这是其中一行的示例:
2020-05-19 07:25:46.768:Verbose: InvegoRFIDReaderProcessor:5:CheckSource:Truck Tag=, Reader Connected=True, Reader Address=XX.XX.XX.XX:XXXX, Last Msg Time=5/18/2020 11:51:03 AM, ReaderType=Source
我想同时忽略时间戳(2020-05-19 07:25:46.768:)和行尾(,Last Msg Time = 5/18/2020 11:51:03 AM,ReaderType = Source),只担心行的中间。有没有一种方法可以使用类似于SQL中的'%'来设置仅等于行中间的变量?
如果您将每行读为字符串,请尝试以下操作:
value = row[row.index("Tag"):row.index(", Last")]
您可以使用正则表达式:
import re
text = '2020-05-19 07:25:46.768:Verbose: InvegoRFIDReaderProcessor:5:CheckSource:Truck Tag=, Reader Connected=True, Reader Address=XX.XX.XX.XX:XXXX, Last Msg Time=5/18/2020 11:51:03 AM, ReaderType=Source'
print(re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}(.+)\d{1,2}\/\d{2}/\d{4}', text).group(1))
您可以使用正则表达式获取想要的东西。
import re
text = '2020-05-19 07:25:46.768:Verbose: InvegoRFIDReaderProcessor:5:CheckSource:Truck Tag=, Reader Connected=True, Reader Address=XX.XX.XX.XX:XXXX, Last Msg Time=5/18/2020 11:51:03 AM, ReaderType=Source'
result = re.match(r'[\d\-\W:]+(.+),\WL', text)
print(result.group(1))
您可以从此处https://docs.python.org/3.8/library/re.html获得有关re的更多信息
如果整个日志位于名为text的变量中,则可以使用以下代码:
import re
#assume complete log file is in the text variable
#add code to load log-file into variable "text" HERE
#added sample text
text = """2020-05-19 07:25:46.768:Verbose: InvegoRFIDReaderProcessor:5:CheckSource:Truck Tag=, Reader Connected=True, Reader Address=XX.XX.XX.XX:XXXX, Last Msg Time=5/18/2020 11:51:03 AM, ReaderType=Source"""
pattern = re.compile(r'\.\d{3}:([\w:\s=,\.]*)Last')
result = pattern.findall(text)
print(result)
此将匹配一切
after和timestamp,例如“ 2020-05-19 07:25:46.768:”
其后通过“最后消息时间= 5/18/2020 11:51:03 AM,ReaderType =来源”
并将结果放入名为结果的列表中。
我已经使用您提供的示例日志对代码进行了测试。
您可以在此处测试任何正则表达式:regex101.com