Python 从字典中写入 JSON 临时文件

Abd*_*man 7 python json temporary-files python-3.x

我正在开发一个 python(3.6) 项目,在该项目中我需要从 Python 字典中编写一个 JSON 文件。

这是我的字典:

{'deployment_name': 'sec_deployment', 'credentials': {'type': 'type1', 'project_id': 'id_001',}, 'project_name': 'Brain', 'project_id': 'brain-183103', 'cluster_name': 'numpy', 'zone_region': 'europe-west1-d', 'services': 'Single', 'configuration': '', 'routing': ''}
Run Code Online (Sandbox Code Playgroud)

我需要将credentials密钥写入JSON 文件。

这是我尝试过的方法:

tempdir = tempfile.mkdtemp()
saved_umask = os.umask(0o077)
path = os.path.join(tempdir)
cred_data = data['credentials']
with open(path + '/cred.json', 'a') as cred:
    cred.write(cred_data)
credentials = prepare_credentials(path + '/cred.json')
print(credentials)
os.umask(saved_umask)
shutil.rmtree(tempdir)
Run Code Online (Sandbox Code Playgroud)

它不是在写一个 JSON 格式的文件,那么生成的文件是:

{
  'type': 'type1',
  'project_id': 'id_001',
}
Run Code Online (Sandbox Code Playgroud)

它带有单引号而不是双引号。

Hao*_*eke 10

实际上,这应该与更多的 Python 3 本机方法有关。

import json,tempfile
config = {"A":[1,2], "B":"Super"}
tfile = tempfile.NamedTemporaryFile(mode="w+")
json.dump(config, tfile)
tfile.flush()
print(tfile.name)
Run Code Online (Sandbox Code Playgroud)

要分解这个:

  • 我们加载tempfile,并确保有一个名称NamedTemporaryFile
  • 我们将字典转储为json文件
  • 我们确保它已写入通过 flush()
  • 最后我们可以抓取名称来检查一下

请注意,我们可以delete=False在调用时将文件保留更长时间NamedTemporaryFile


Rak*_*esh 2

使用json模块

前任:

import json
with open(path + '/cred.json', 'a') as cred:
    json.dump(cred_data, cred)
Run Code Online (Sandbox Code Playgroud)