Python json转储

Python json转储,python,json,Python,Json,我有一个JSON文件,如下所示: {"environment": "production", "classes": {"nfs::server": {"exports": ["/srv/share1","/srv/share3"]}} } 当我使用Python3.6运行以下代码时 fp=open('example.json', 'r') data=json.load(fp) print(50*'-') print(json.dumps(data, indent=4)) prin

我有一个JSON文件,如下所示:

{"environment": "production", 
 "classes": 
    {"nfs::server": {"exports": ["/srv/share1","/srv/share3"]}}
}
当我使用Python3.6运行以下代码时

fp=open('example.json', 'r')
data=json.load(fp)

print(50*'-')
print(json.dumps(data, indent=4))
print(50*'-')
json.dump(data, sys.stdout, indent=4)
我得到输出:

--------------------------------------------------
{
    "environment": "production",
    "classes": {
        "nfs::server": {
            "exports": [
                "/srv/share1",
                "/srv/share3"
            ]
        }
    }
}
--------------------------------------------------
{
    "environment": "production",
    "classes": {
        "nfs::server": {
            "exports": [
                "/srv/share1",
                "/srv/share3"
            ]
        }
    }
}%

我的问题是,为什么与
json.dumps
字符串相比,
json.dumps
输出中包含额外的
%
?它不是操作系统的工件,因为如果我提供一个文件对象而不是
sys.stdout
,它也会被写入文件

最后一个%是控制台提示行的第一个字符 或者外壳的一个特性()

与json和python无关


因为,当print()在末尾添加“\n”时,转储到stdout不会

原因是
print(json.dumps(data,indent=4))
会打印一个换行符,
json.dump(data,sys.stdout,indent=4)
不会

您可以尝试在末尾添加一个
print()

print(50*'-')
print(json.dumps(data, indent=4))
print(50*'-')
json.dump(data, sys.stdout, indent=4)
print()

%
符号是shell提示的一部分吗

为什么控制台提示符的第一个字符会写入文件?它不是:)sys.stdout不是文件,它是标准输出(即控制台)。OP副本粘贴的内容可能是他控制台中显示的内容。。。因此,伪%char“如果我提供一个文件对象而不是
sys.stdout
,它也会被写入文件。”-那么你的答案如何解释这一部分呢?因为,如果OP使用
cat file.txt
,结果是一样的,没有尾随
\n
,他会看到提示的下一个%:)(只是猜测)我认为这是一个空壳的东西。虽然我的shell提示符中没有%(使用
zsh
),但如果我切换到
bash
,这个问题就会消失。感谢大家的帮助。这可能是编码不匹配的产物吗?仅使用
zsh
,而不使用
bash
可以观察到问题。虽然这解决了输出到控制台的问题,但不会解决输出到文件的问题,即用文件对象替换
sys.stdout
。我的shell提示符没有
%
,但在使用
json时它仍然输出到文件中。dump
这最终是一个shell问题,使用
zsh
我观察到尾部
%
,但是使用bash时没有尾部
%
。谢谢你们的帮助。