Python json转储
我有一个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
{"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时没有尾部%
。谢谢你们的帮助。