在Python中用多个相同文件扩展名的文件从目录中读取文件。

问题描述 投票:0回答:1

我试图使用Python解析一个位于下面所示文件路径中的特定XSD文件(File1.xsd),但是在该文件路径中存在多个具有相同文件扩展名的文件(File2.xsd和File3.xsd)。 File1.xsd将被用来验证一个xml与File1.xsd模式的关系,但我无法解析这个单一的XSD文件的文件路径(根据 "xml_validator "函数)。

有谁知道如何调整增强代码,使其只查找File1.xsd,并以同样的技术应用于具有相同文件扩展名的多个文件的目录--根据 "is_valid "函数,输出将是一个布尔表达式,任何帮助都是非常感激的。

import os
import glob
import lxml
from lxml import etree
from lxml.etree import XMLSchema
import xmlschema

path = "C:\\Users\\mdl518\\Desktop\\Data\\"

def validation():
    for filename in glob.glob(os.path.join(path, "*.xml")):
        with open(filename,'r') as f: 
            xml_file=lxml.etree.parse(f)
            xml_validator=lxml.etree.XMLSchema(file="<path_to_File1.xsd">))
            is_valid=xml_validator.validate(xml_file)
            print(is_valid)
        return

validation()
python xml parsing automation xsd
1个回答
0
投票

你可以将你需要的文件作为验证器打开(File1.xsd),对其进行解析,然后再循环执行。.xml 文件,将xml_validator一行替换为:xml_validator=lxml.etree.XMLSchema(os.path.join(path,filename.replace(".xml"))。

path = "C:\\Users\\mdl518\\Desktop\\Data\\"

def validation():
    with open(f"{path}File1.xsd", 'r') as filxsd:
         xml_validator = XMLSchema(file=filxsd)
    for fil in glob.glob(f"{path}*.xml"):                 
        with open(fil, 'r') as f: 
            xml_file = lxml.etree.parse(f)
            is_valid = xml_validator.validate(xml_file)
            print(is_valid)

0
投票

将xml_validator一行替换为:xml_validator=lxml.etree.XMLSchema(os.path.join(path,filename.replace(".xml",".xsd")))

我假设你的文件名最后只包含字符串".xml",如果你的文件名像 "my.xmlfile.xml",你应该只替换最后的".xml "实例。

© www.soinside.com 2019 - 2024. All rights reserved.