2016-02-28 70 views
0

我是Python編程的新手。 我想使用python將YAML文件轉換爲JSON文件。 我正在使用pyyaml包進行轉換。 在YAML文件中,有一些日期值正在Python中轉換爲Datetime對象。我需要將它們按原樣或字符串轉換。將Python字符串變量中的datetime轉換爲正確的格式

樣品YAML文件:http://pastebin.com/sdcx6sEJ

輸出String:http://pastebin.com/Bvm5cNwH

輸出: { 「元」:{ 「data_version」:0.6, 「創建」:datetime.date( 「修訂」:1}

預計: {「meta」:{ 「data_version」:0.6, 「創造」: 「2013年2月22日」, 「版本」:1}

sourcedir = "D:/YAML/" 
targetdir = "D:/JSON/" 
for subdir, dirs, files in os.walk(sourcedir): 
    for file in files: 
     # print os.path.join(subdir, file) 
     filepath = subdir + file 
     if filepath.endswith(".yaml"): 
      with open(filepath, 'r') as src: 
       try: 
        JSONfile = targetdir + file.replace("yaml", "json") 
        currentfile = open(JSONfile, 'w') 
        ymldata = yaml.load(src) 
        # print(ymldata) 
        ymldata = str(ymldata) 
        ymldata = ymldata.replace("'", "\"") 
        # ymldata = ymldata.replace("datetime.date(2005, 6, 13)", "\"2005-06-13\"") 
        print(ymldata) 
        json.loads(ymldata) 
        # jsondata = json.dumps(ymldata) 
        # jsonSTR = str(jsondata) 
        # currentfile.write(jsonSTR) 
       except ValueError as exc: 
        print(exc) 

回答

0

我想打電話pyyaml.safe_load()將防止複雜對象的創建。所以這可能適合你。

+0

我沒有日期時間對象,因爲它是嵌入在字符串中。更新問題以包含代碼。 TIA。 –

+0

我更新了我的答案 –

+0

感謝林肯爲您的時間。我檢查了safe_load()並仍然在字符串中獲得相同的datetime對象。 –

0
In [1]: datetime.date(2013, 2, 22).isoformat() 
Out[1]: '2013-02-22' 

或者使用手動格式得到它反正你想:

In [1]: datetime.date(2013, 2, 22).strftime('%Y-%m-%d') 
Out[1]: '2013-02-22' 

In [2]: datetime.date(2013, 2, 22).strftime('%Y/%m/%d') 
Out[2]: '2013/02/22' 

+0

我在字符串中獲取文本「datetime ...」,而不是對象本身。更新了包含代碼的問題。 –

+0

在您的示例輸出中,它不是日期時間內的字符串,但實際的對象...? – olofom

+0

更新了問題以包含示例數據。 –

0

將此放在你內心最試試/ except塊(json.loads()之前):

ymldata['meta']['created'] = ymldata['meta']['created'].strftime('%Y-%m-%d') 
相關問題