Python使用lxml和fileinput

Python使用lxml和fileinput,第1张

概述有一个简单的xml <?xml version="1.0" encoding="UTF-8" ?><root> <child>abc</child></root> 我想从文件中解析它,这很有效: with open('tst.xml') as test_xml: for _, element in lxml.etree.iterparse(test_xml, tag='chil 有一个简单的xml

<?xml version="1.0" enCoding="UTF-8" ?><root>    <child>abc</child></root>

我想从文件中解析它,这很有效:

with open('tst.xml') as test_xml:    for _,element in lxml.etree.iterparse(test_xml,tag='child'):        print element.text # prints abc as expected

但是,我尝试修改脚本然后允许它从文件或stdin解析xml并且没有成功:

fi = fileinput.input('tst.xml')for _,element in lxml.etree.iterparse(fi,tag='child'):    print element.text# file "iterparse.pxi",line 371,in lxml.etree.iterparse.__init__ (src/lxml/lxml.etree.c:97283)# file "APIhelpers.pxi",line 1411,in lxml.etree._encodefilename (src/lxml/lxml.etree.c:22515)# TypeError: Argument must be string or unicode.

我不确定我做错了什么. FileInput对象在python中不是类文件对象吗?

解决方法 没有深入调查,似乎异常的原因是fileinput类不提供读取方法.
为了实现我的目标,我现在最终编写了自己的包装器:

class fileinput(object):    def __init__(self,filename=None,*args,**kwargs):        self.file = open(filename,**kwargs) if filename and filename != "-" else sys.stdin    def __enter__(self):        return self.file    def __exit__(self,type,value,traceback):        if self.file is not sys.stdin:            self.file.close()    def __getattr__(self,name):        return getattr(self.file,name)

我会等待更好的答案.

总结

以上是内存溢出为你收集整理的Python使用lxml和fileinput全部内容,希望文章能够帮你解决Python使用lxml和fileinput所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1196943.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存