我是python的新手,我尝试做的是用python os shell命令替换json文件中的text / string。我有点得到了我正在寻找的结果,但是它在json文件中附加了额外的空格/创建了一个新行。这基本上就是我想要完成的事情:
以下是我目前所拥有的(为了简单起见,我用简单的命令替换了真正的aws cli命令)
import os
import fileinput
cmd = 'hostname > host.txt'
cmd2 = 'echo mama > echo.txt'
os.system(cmd)
os.system(cmd2)
file = open('host.txt')
contents = file.read()
with open("out.json", "wt") as fout:
with open("add.json", "rt") as fin:
for line in fin:
fout.write(line.replace('dns',contents))
file2 = open('echo.txt')
contents2 = file2.read()
with open("out2.json", "wt") as fout2:
with open("out.json", "rt") as fin2:
for line in fin2:
fout2.write(line.replace('ip', contents2))
这就是它产生的结果:
{
"Comment": "A new record set for the zone.",
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "WildburritoPC
",
"Type": "A",
"TTL": 60,
"ResourceRecords": [
{
"Value": "mama
"
}
]
}
}
]
}
正如您所看到的,在Name和Value之后,它确实替换了值,但添加了一个新行并生成了无效的json。
这是我替换以下值的文件:
{
"Comment": "A new record set for the zone.",
"Changes": [
{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "dns",
"Type": "A",
"TTL": 60,
"ResourceRecords": [
{
"Value": "ip"
}
]
}
}
]
}
提前感谢您的任何答案。我知道我上面的东西非常脏,而且我确信必须有更好/更清洁的方式来完成我想要做的事情,但最终我知道我们都必须从某个地方开始我可以&甚至开始解释我对这个社区的感激之情,感谢他们迄今提供的所有帮助。
答案 0 :(得分:2)
python的标准库中有json
个模块,使用它而不是替换字符串会更加错误。
加载json
文件:
import json
with open("add.json", "r") as fout2:
json_data = json.load(fout2)
for change in json_data["Changes"]:
# strip the contents of trailing white spaces (new line)
change["Name"] = change["Name"].strip()
# dump json to another file
with open("out.json", "w") as fout:
fout.write(json.dumps(json_data))
我猜你有这个主意。 json
模块会注意你的json数据没有被破坏(或者至少它会在发生这种情况时失败并且异常)。
答案 1 :(得分:1)
只需将该文件作为普通文本文件打开并替换您想要的字符串
with open('file.json', 'r+') as file:
content = file.read()
file.seek(0)
content.replace('string_replaced', 'new_string')
file.write(content)
由于你想在任何地方替换字符串,数据是否为json无关紧要