以下是我如何转储文件的方法
with open('es_hosts.json', 'w') as fp:
json.dump(','.join(host_list.keys()), fp)
结果是
"a,b,c"
我希望:
a,b,c
谢谢
以下是我如何转储文件的方法
with open('es_hosts.json', 'w') as fp:
json.dump(','.join(host_list.keys()), fp)
结果是
"a,b,c"
我希望:
a,b,c
谢谢
在进行字符串替换之前,您可能想要去除引号:strip
print '"a,b,c"'.strip('"')
输出:
a,b,c
这更接近你想要实现的目标。即使只是删除第一个和最后一个字符也可以: '"a,b,c"'[1:-1]
。
但是你看过这个问题吗?
"my name is \"Andy\""
。你希望的是只删除开头和结尾的双引号。 - Andreas Maierstrip()
)。第二种解决方案(使用切片)适用于所有情况(并且应该有自己的答案以便投票)。仍然支持此答案。 - Andreas Maier如果您只想删除keys中的引号,这可能很重要,因为您稍后可能会对其进行解析(假设使用某些宽容的解析器或者仅出于奇怪的原因直接将其导入node
),您可以尝试以下正则表达式。
re.sub(r'(?<!: )"(\S*?)"', '\\1', json_string)
一个问题是这个正则表达式期望字段被分隔为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)
会引发一个ValueError
,但会打印出您想要的内容。
with open('es_hosts.json', 'w') as fp:
json.dump(','.join(host_list.keys()).replace('\"',''), fp)
那不是有效的JSON,所以json
模块无法帮助你编写该数据。但你可以这样做:
import json
with open('es_hosts.json', 'w') as fp:
data = ['a', 'b', 'c']
fp.write(json.dumps(','.join(data)).replace('"', ''))
json
,但实际上不是 json 格式,这个应该就够用了:with open('es_hosts.json', 'w') as fp:
data = ['a', 'b', 'c']
fp.write(','.join(data))
只需使用for循环将列表分配给字符串。
import json
with open('json_file') as f:
data = json.loads(f.read())
for value_wo_bracket in data['key_name']:
print(value_wo_bracket)
json.load
和json.loads
之间存在差异。
write
可能比使用dump
更有意义,例如fp.write(mydata)
。 - Fabien Snauwaert