首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中从文本文件的特定行中提取文本?

如何在Python中从文本文件的特定行中提取文本?
EN

Stack Overflow用户
提问于 2020-05-19 01:43:49
回答 2查看 46关注 0票数 0

我有一个日志文件,它当前存储以下信息:

代码语言:javascript
运行
复制
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流)。有没有一种方法可以读取文件并只提取这个特定的流?目前,我正在做以下工作:

代码语言:javascript
运行
复制
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()

但此方法会产生如下输出:

代码语言:javascript
运行
复制
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数组的最后一行。

EN

回答 2

Stack Overflow用户

发布于 2020-05-19 17:22:02

对于您的第二个问题,您应该使用‘反向’读取,即从文件末尾开始的循环,然后在找到第一个rtsp行后使用简单的break

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2020-05-19 02:05:05

模块re和正则表达式就是您要查找的:

编辑:

代码语言:javascript
运行
复制
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()

此外,如果您想从文件的末尾进行搜索,可以使用以下命令更改循环:

代码语言:javascript
运行
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61875731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档