Python中是否有与SQL中相同的通配符'%'?

问题描述 投票:0回答:4

我的代码在不断更新的日志文件中运行。我想挑选出不必要的行,并使代码只担心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中的'%'来设置仅等于行中间的变量?

python wildcard tail
4个回答
0
投票

如果您将每行读为字符串,请尝试以下操作:

value = row[row.index("Tag"):row.index(", Last")]

0
投票

您可以使用正则表达式:

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))

0
投票

您可以使用正则表达式获取想要的东西。

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的更多信息


0
投票

如果整个日志位于名为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)

将匹配一切

aftertimestamp,例如“ 2020-05-19 07:25:46.768:”

其后通过“最后消息时间= 5/18/2020 11:51:03 AM,ReaderType =来源”

并将结果放入名为结果的列表中。

我已经使用您提供的示例日志对代码进行了测试。

您可以在此处测试任何正则表达式:regex101.com

© www.soinside.com 2019 - 2024. All rights reserved.