Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在读取的文件中区分两行_Python_Json_Python 2.7_Subprocess - Fatal编程技术网

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”是一行接一行的字符串。我使用您的解决方案编辑了带有错误的问题。你能看看吗,鲁兹?我已经改变了答案。