【问题标题】:Converting all XML files to JSON files in a folder in python?将所有XML文件转换为python文件夹中的JSON文件?
【发布时间】:2018-10-25 19:29:33
【问题描述】:

我有一个包含 1000 个 XML 文件的文件夹。现在我想读取每个 xml 文件并为相应的 xml 文件创建一个 json 文件,而不删除 xml 文件。

例如: 如果我有一个名为 abc.xml 的文件,我希望将该 xml 文件转换为 json 并存储为 abc.json,因此该文件夹应该包含 abc.xml、abc.json并且所有文件都应该相同。

目前,我正在使用以下代码块将 xml 转换为 json,但问题是它没有创建新的 json 文件。

for filename in os.listdir(path):
    if not filename.endswith('.xml'): continue
    fullname = os.path.join(path, filename)
    with open(fullname, 'r') as f:
        xmlString = f.read()
    jsonString = json.dumps(xmltodict.parse(xmlString), indent=4)
    with open(fullname, 'w') as x:
        x.write(jsonString)

非常感谢任何相关的建议。

【问题讨论】:

  • 看起来您正在覆盖您的 xml 文件,您没有更改文件名
  • 是的,这正是我不希望发生的事情。我想为那个 xml 文件创建一个新的 json 文件。

标签: python json xml


【解决方案1】:

fullname 是您输入的xml 文件的名称。您想将其更改为“相同的东西,但 json”,否则您将创建一个带有 xml 扩展名但 json 数据的文件(破坏您的原始 xml 文件,不是我很关心 xml 但是......)

with open(fullname, 'r') as f:
    xmlString = f.read()
json_output = os.path.splitext(fullname)[0]+".json"

现在直接写你的文件(不需要先创建一个字符串)

with open(json_output, 'w') as f:
    json.dump(xmltodict.parse(xmlString), f, indent=4)

请注意,您可以像这样直接使用glob.glob,这样您就可以获得完整的 xml 过滤路径:

for fullname in glob.glob(os.path.join(path,"*.xml"):

【讨论】:

  • 谢谢琼。工作完美。感谢您的帮助。
【解决方案2】:

这应该可行。

import xmltodict

for filename in os.listdir(path):
    if not filename.endswith('.xml'):
        continue

    fullname = os.path.join(path, filename)

    with open(fullname, 'r') as f:
        xmlString = f.read()

    jsonString = json.dumps(xmltodict.parse(xmlString), indent=4)

    with open(fullname[:-4] + ".json", 'w') as f:
        f.write(jsonString)

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多