将Python字符串变量中的datetime转换为正确的格式

时间:2016-02-28 21:30:25

标签: python json datetime

我是Python编程的新手。 我想使用python将YAML文件转换为JSON文件。 我正在使用pyyaml包进行转换。 在YAML文件中,有一些日期值正在Python中转换为Datetime对象。我需要将它们按原样转换为字符串。

示例YAML文件: http://pastebin.com/sdcx6sEJ

输出字符串: http://pastebin.com/Bvm5cNwH

输出: {“meta”:{“data_version”:0.6,“created”:datetime.date(2013,2,22),“revision”:1}

预期: {“meta”:{“data_version”:0.6,“created”:“2013-02-22”,“revision”: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)

3 个答案:

答案 0 :(得分:0)

我认为调用pyyaml.safe_load()会阻止复杂对象的创建。这可能对你有用。

答案 1 :(得分: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'

答案 2 :(得分:0)

将它放在你最内层的try / except块中(在json.loads()之前):

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