Python 在读取的文件中区分两行
我这样做是为了读取文件Python 在读取的文件中区分两行,python,json,python-2.7,subprocess,Python,Json,Python 2.7,Subprocess,我这样做是为了读取文件 f = subprocess.Popen(["../../../abc/def/run_script.sh", "cat", "def/data/ex/details.json"], stdout=subprocess.PIPE) out = f.stdout.readline() 从上面读取的文件内容如下所示: { "def1": { "val1": 31.6, "val2" : 10 }, "d
f = subprocess.Popen(["../../../abc/def/run_script.sh", "cat", "def/data/ex/details.json"], stdout=subprocess.PIPE)
out = f.stdout.readline()
从上面读取的文件内容如下所示:
{
"def1": {
"val1": 31.6, "val2" : 10
},
"def2": {
"9": {
"val1": 20.1, "val2": 22
}
}
}
我该怎么做呢。当只有1个“val1”和1个“val2”时,我用regex做了一个简单的搜索并保存了值。既然有两个,我需要小心知道我在对付哪一个。。有没有简单的办法
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting object: line 1 column 3 (char 2)
用于解析JSON
Python 3代码:
import json
import subprocess
with subprocess.Popen(["cat", "/tmp/foo.json"], stdout=subprocess.PIPE) as f:
j = f.stdout.read()
o = json.loads(j.decode("UTF-8"))
print(o)
print(o["def1"]["val1"])
print(o["def2"]["9"]["val1"])
{'def1': {'val1': 31.6, 'val2': 10}, 'def2': {'9': {'val1': 20.1, 'val2': 22}}}
31.6
20.1
输出:
import json
import subprocess
with subprocess.Popen(["cat", "/tmp/foo.json"], stdout=subprocess.PIPE) as f:
j = f.stdout.read()
o = json.loads(j.decode("UTF-8"))
print(o)
print(o["def1"]["val1"])
print(o["def2"]["9"]["val1"])
{'def1': {'val1': 31.6, 'val2': 10}, 'def2': {'9': {'val1': 20.1, 'val2': 22}}}
31.6
20.1
编辑:
import json
import subprocess
with subprocess.Popen(["cat", "/tmp/foo.json"], stdout=subprocess.PIPE) as f:
j = f.stdout.read()
o = json.loads(j.decode("UTF-8"))
print(o)
print(o["def1"]["val1"])
print(o["def2"]["9"]["val1"])
{'def1': {'val1': 31.6, 'val2': 10}, 'def2': {'9': {'val1': 20.1, 'val2': 22}}}
31.6
20.1
对于Python2,请改用它
import json
import subprocess
f = subprocess.Popen(["cat", "/tmp/foo.json"], stdout=subprocess.PIPE)
j = f.stdout.read()
o = json.loads(j.decode("UTF-8"))
print o
print o["def1"]["val1"]
print o["def2"]["9"]["val1"]
鉴于它是JSON,您可以使用您选择的语言中的JSON解析器吗。谢谢你的回复。我该如何构建“s”?。“out”逐行打印文件的cat。
out
不是iter(f.stdout.readline,“”)中i的字符串吗?s=[]:s.append(i)如果我这样做似乎不正确。我似乎不能在这里使用“json.loads()”。然后呢?。是的,“out”是一行接一行的字符串。我使用您的解决方案编辑了带有错误的问题。你能看看吗,鲁兹?我已经改变了答案。