gpt4 book ai didi

Python 将 lxml 与文件输入一起使用

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:08 25 4
gpt4 key购买 nike

有一个简单的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类没有提供read方法导致异常。为了实现我的目标,我最终暂时编写了自己的包装器:

class FileInput(object):
def __init__(self, filename=None, *args, **kwargs):
self.file = open(filename, *args, **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 与文件输入一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20653200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com