首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从txt文件获取值

从txt文件获取值
EN

Stack Overflow用户
提问于 2018-12-14 10:16:40
回答 2查看 2K关注 0票数 0

我试图从具有特定字符串的txt文件中获取一些值。我的文本文件包含更多数据,如下所示,

代码语言:javascript
复制
2018-11-11 00:00:10 INFO ProtocolProcessor:417 - PUBLISH on server 80 from clientID <ClientId> on topic </data/AClientData> with QoS MOST_ONE
2018-11-11 00:00:10 INFO ProtocolProcessor:530 - Received Msg:{
"id" : "A001",
"val" : 62.0,
"ts" : "2018-11-10 23:41:21"
}
2018-11-11 00:00:10 INFO ProtocolProcessor:587 - send publish message to <tcp://35.166.43.154:80> on topic </data/BClientData>
2018-11-11 00:00:11 INFO Consumer:39 - Received a message of type PUBLISH
2018-11-11 00:00:11 INFO Consumer:58 - String received before queue:{
"id" : "B001",
"val" : 89.0,
"ts" : "2018-11-10 23:42:21"
} 

从上面的文本中,我想以下面的格式打印接收到的,其中行包含/data/AClientData。

代码语言:javascript
复制
id =A001,
value = 62.0
date = 2018-11-10 23:41:21

已尝试的代码:

代码语言:javascript
复制
searchString = '/data/AClientData'
search = open("C:\\ReadLogUsingPython.txt","r")
for line in search.readlines():
    if searchString in line:
        #here need to take value of next line Received Msg:{ }
        #print each value
        valueDict ={"id" : "A001","val" : 62.0,"ts" : "2018-11-10 23:41:21"}
        print(valueDict['id'])
        print(valueDict['val'])
        print(valueDict['ts']) 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-14 10:26:04

这是一种使用简单迭代的方法。

Ex:

代码语言:javascript
复制
with open(filename) as infile:
    for line in infile:
        if "/data/AClientData" in line:
            next(infile)
            extractData = [next(infile).strip().replace('"', "") for i in range(3)]
            for i in extractData:
                print("{}={}".format(*i.split(" : ")))

输出:

代码语言:javascript
复制
id=A001,
val=62.0,
ts=2018-11-10 23:41:21
票数 1
EN

Stack Overflow用户

发布于 2018-12-14 10:30:24

为此,我将逐字符扫描<>栅栏,然后将内容与{}所限制的JSON解析字符串关联起来。例如

代码语言:javascript
复制
results = {}
fp = open('file.txt', 'r'):

char = fp.read(1)
nameStart, nameEnd, jStart, jEnd = None
while char:
    If char == '<'
        nameStart = fp.seek()
    elif char == '>':
        nameEnd = fp.seek()
    elif char == '{':
        jStart = fp.seek()
    elif char == '}':
        jEnd = fp.seek()
        # read the string between each start/end pair, parse json, and stash in results
    char = fp.read(1)

我在电话里打了这个,所以请原谅任何错误。不过,这是个粗略的想法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53777684

复制
相关文章

相似问题

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