Python yaml转储混淆

时间:2013-04-26 07:03:11

标签: python json yaml

假设我有一个如下所示的json文件,称之为src.json

{
    "main": {
        "contenttype": "Document"
    },
    "dublin": {
        "title": "ダウンロード",
        "description": "",
        "creators": [
            "池田大作"
         ],
        "created": "2012-04-23 10:09:34.642940"
    }
}

我想使用dublin中的dst.yamlyaml内容转储到python

这是我的代码:

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 )

但是,我对结果不满意:

{created: '2010-03-26 09:26:44.002029', creator: 池田大作, description: '    ', title: ダウンロード}     

满意的应该是:

created: 2010-03-26 09:26:44.002029
creator: 池田大作
description: ''
title: ダウンロード

然后,我的问题是:

  1. 为什么'2010-03-26 09:26:44.002029'titlecreator时没有单引号? 如何删除日期周围的单引号?
  2. 换行在哪里?应该有yaml转储操作。
  3. 任何一个帮助!

1 个答案:

答案 0 :(得分:6)

  1. 因为它有空格。
  2. 在致电default_flow_style=False
  3. 的通话中设置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)