Python yaml转储混淆

hol*_*lys 4 python json yaml

假设我有一个类似下面的json文件,请调用它src.json.

{
    "main": {
        "contenttype": "Document"
    },
    "dublin": {
        "title": "??????",
        "description": "",
        "creators": [
            "????"
         ],
        "created": "2012-04-23 10:09:34.642940"
    }
}
Run Code Online (Sandbox Code Playgroud)

我想把dublin内容转储到dst.yaml使用yamlpython.

这是我的代码:

import json
import yaml

with open('src.json') as f:
    data = json.load(f)

dump = {'title': data.get('dublin', {}).get('title', ''),
        'description': data.get('dublin', {}).get('description', ''),
        'creator': data.get('dublin', {}).get('creators',[''])[0],
        'created': data.get('dublin', {}).get('created', '')
       }
with open('dst.yaml', 'w') as stream:
    yaml.safe_dump(dump, stream, allow_unicode=True )
Run Code Online (Sandbox Code Playgroud)

但是,我对结果不满意:

{created: '2010-03-26 09:26:44.002029', creator: ????, description: '    ', title: ??????}     
Run Code Online (Sandbox Code Playgroud)

满意的应该是:

created: 2010-03-26 09:26:44.002029
creator: ????
description: ''
title: ??????
Run Code Online (Sandbox Code Playgroud)

然后,我的问题是:

  1. 为什么'2010-03-26 09:26:44.002029'有单引号,而titlecreator不?如何删除日期周围的单引号?
  2. 换线在哪里?它应该具有yaml转储操作.

任何一个帮助!

Amb*_*ber 6

  1. 因为它有一个空间.
  2. 设置default_flow_style=False在您的来电yaml.dump().

此外,您不需要进行所有重建; 你可以直接转储现有的都柏林字典:

import json
import yaml

with open('src.json') as f:
    data = json.load(f)

with open('dst.yaml', 'w') as stream:
    yaml.safe_dump(data.get('dublin', {}), stream, allow_unicode=True,
                   default_flow_style=False)
Run Code Online (Sandbox Code Playgroud)