我有一个日志文件,它当前存储以下信息:
RTSP0 rtsp://admin:****@192.168.0.104:554/onvif1
RTSP1 rtsp://admin:****@192.168.0.104:554/onvif2
CAMERA_HASH a586c0c691aa7e3fb37d1ff318bf4d6fdb83b24b
RTSP0 rtsp://admin:****@192.168.0.104:554/onvif1
RTSP1 rtsp://admin:****@192.168.0.104:554/onvif2
CAMERA_HASH a586c0c691aa7e3fb37d1ff318bf4d6fdb83b24b
RTSP0 rtsp://admin:****@192.168.0.104:554/onvif1
RTSP1 rtsp://admin:****@192.168.0.104:554/onvif2
CAMERA_HASH a586c0c691aa7e3fb37d1ff318bf4d6fdb83b24b
每次连接摄像头时,都会在日志文件中添加两个新的RTSP流(即RTSP0和RTSP1)和一个哈希号。我需要提取最近连接的摄像头的RTSP流(即最近的RTSP0流)。有没有一种方法可以读取文件并只提取这个特定的流?目前,我正在做以下工作:
searchfile = open('/Eya/pine_onvif/logs/camera_hash.log', 'r')
search = searchfile.readlines()
stream = []
line_cont = []
streamValue = []
for i,line in enumerate(search):
if 'RTSP0' in line:
line_cont = line
stream = line.split(' ')
streamValue = stream[1]
filename = streamValue
print(streamValue)
searchfile.close()
但此方法会产生如下输出:
rtsp://admin:****@192.168.0.104:554/onvif1
rtsp://admin:****@192.168.0.104:554/onvif1
rtsp://admin:****@192.168.0.104:554/onvif1
我无法仅检索streamValue
数组的最后一行。
发布于 2020-05-19 17:22:02
对于您的第二个问题,您应该使用‘反向’读取,即从文件末尾开始的循环,然后在找到第一个rtsp行后使用简单的break
:
for line in reversed(list(searchfile)):
hash = re.match(r"RTSP[.0-9] (rtsp:\/\/.*)", line.rstrip())
if hash is not None :
print(hash.group(1))
break
发布于 2020-05-19 02:05:05
模块re
和正则表达式就是您要查找的:
编辑:
import re
searchfile = open('/Eya/pine_onvif/logs/camera_hash.log', 'r')
for line in searchfile:
hash = re.match(r"RTSP[.0-9] (rtsp:\/\/.*)", line)
if hash is not None :
print(hash.group(1))
searchfile.close()
此外,如果您想从文件的末尾进行搜索,可以使用以下命令更改循环:
for line in reversed(list(searchfile)):
hash = re.match(r"RTSP[.0-9] (rtsp:\/\/.*)", line.rstrip())
if hash is not None :
print(hash.group(1))
https://stackoverflow.com/questions/61875731
复制相似问题