Tam*_*mpa 7 python json python-2.7
这是我如何转储文件
with open('es_hosts.json', 'w') as fp:
json.dump(','.join(host_list.keys()), fp)
Run Code Online (Sandbox Code Playgroud)
结果是
"a,b,c"
Run Code Online (Sandbox Code Playgroud)
我想要:
a,b,c
Run Code Online (Sandbox Code Playgroud)
谢谢
在进行字符串替换之前,您可能需要strip将引号引起来:
print '"a,b,c"'.strip('"')
Run Code Online (Sandbox Code Playgroud)
输出:
a,b,c
Run Code Online (Sandbox Code Playgroud)
这更接近您想要实现的目标。哪怕只是除去第一和最后一个字符的作品:'"a,b,c"'[1:-1]。
但是你有没有研究这个问题?
要仅删除键中的引号,这在您稍后解析时可能很重要(大概是使用一些宽容的解析器,或者您可能node出于奇怪的原因直接将其输入),您可以尝试以下正则表达式。
re.sub(r'(?<!: )"(\S*?)"', '\\1', json_string)
Run Code Online (Sandbox Code Playgroud)
一个问题是这个正则表达式期望字段被分离key: value,并且它将失败key:value. 您可以通过稍作更改使其适用于后者,但同样地,它不适用于可变数量的空格之后:
可能还有其他边缘情况,但它适用于 的输出json.dumps,但是结果将无法被 json 解析。一些更宽容的解析器yaml可能能够读取结果。
import re
regex = r'(?<!: )"(\S*?)"'
o = {"noquotes" : 127, "put quotes here" : "and here", "but_not" : "there"}
s = json.dumps(o)
s2 = json.dumps(o, indent=3)
strip_s = re.sub(regex,'\\1',s)
strip_s2 = re.sub(regex,'\\1',s2)
print(strip_s)
print(strip_s2)
assert(json.loads(strip_s) == json.loads(s) == json.loads(strip_s2) == json.loads(s2) == object)
Run Code Online (Sandbox Code Playgroud)
将提高 aValueError但打印你想要的。
使用python内置的字符串替换函数
with open('es_hosts.json', 'w') as fp:
json.dump(','.join(host_list.keys()).replace('\"',''), fp)
Run Code Online (Sandbox Code Playgroud)