2016-02-28 74 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') 
相关问题