我是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)
答案 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')