Python虚拟内存文件路径指定方法及虚拟XML文件解析问题咨询
如何解析内存文件系统中的XML文件
嘿,我明白你遇到的问题了——你用fs模块创建了内存文件系统,但xml.etree.ElementTree.parse()根本不认mem://这种路径,对吧?这是因为Python标准库的XML解析器只支持常规本地文件路径或者类文件对象,它不知道fs模块的内存文件系统协议。
下面给你两种可行的解决方案:
方案1:直接传入内存文件对象
从内存文件系统中打开文件,把得到的文件对象直接传给Et.parse(),这是最直接的方式:
import fs import xml.etree.ElementTree as Et mem_fs = fs.open_fs('mem://') os_fs = fs.open_fs(".") # 复制本地test.xml到内存文件系统 fs.copy.copy_file(os_fs, 'test.xml', mem_fs, 'mem_test.xml') # 关键步骤:用mem_fs打开文件,获取文件对象 with mem_fs.open('mem_test.xml', 'r') as mem_file: tree = Et.parse(mem_file) # 直接传入文件对象 root = tree.getroot() # 这里可以添加你的XML处理逻辑,比如打印根节点标签 print(f"根节点标签:{root.tag}") mem_fs.close()
方案2:读取XML内容为字符串后解析
如果你更倾向于处理字符串内容,可以先把内存文件的内容读出来,再用Et.fromstring()解析:
import fs import xml.etree.ElementTree as Et mem_fs = fs.open_fs('mem://') os_fs = fs.open_fs(".") fs.copy.copy_file(os_fs, 'test.xml', mem_fs, 'mem_test.xml') # 读取内存文件的文本内容 xml_content = mem_fs.readtext('mem_test.xml') # 从字符串解析XML root = Et.fromstring(xml_content) tree = Et.ElementTree(root) # 处理XML内容示例 print(f"根节点标签:{root.tag}") mem_fs.close()
为什么你的原路径不行?
mem://mem_test.xml是fs模块自定义的内存文件系统路径格式,Python标准库的ElementTree并没有集成对这个协议的支持,所以直接传这种路径或者内存文件对象的字符串表示(比如{}'.format(mem_file))都会失败——解析器根本不知道该去哪里找这个文件。
内容的提问来源于stack exchange,提问作者Yuri Winche Achermann
相关产品推荐
相关产品推荐

