我试图从具有特定字符串的txt文件中获取一些值。我的文本文件包含更多数据,如下所示,
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。
id =A001,
value = 62.0
date = 2018-11-10 23:41:21已尝试的代码:
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']) 发布于 2018-12-14 10:26:04
这是一种使用简单迭代的方法。
Ex:
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(" : ")))输出:
id=A001,
val=62.0,
ts=2018-11-10 23:41:21发布于 2018-12-14 10:30:24
为此,我将逐字符扫描<和>栅栏,然后将内容与{和}所限制的JSON解析字符串关联起来。例如
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)我在电话里打了这个,所以请原谅任何错误。不过,这是个粗略的想法。
https://stackoverflow.com/questions/53777684
复制相似问题