2013-04-26 48 views
3

比方說,我有一個像下面這樣的json文件,稱之爲src.jsonPython yaml轉儲混淆

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

我想轉儲dublin內容dst.yamlpython使用yaml

這裏是我的代碼:

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. 換行符在哪裏?它應該與山藥傾銷行動。

任何一個幫助!

回答

6
  1. 因爲它有一個空間。
  2. 請在yaml.dump()的電話中填寫default_flow_style=False

而且,你不需要做所有的重建;您可以直接轉儲現有的都柏林字典:

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)