Python str.fund()重写Element.find(),如何规避



我正在编写一些代码,使用Python的xml.etree.ElementTree模块中的Element.find()方法。然而,我发现,一旦我开始使用str.replace(),Python就会将我对object.find()的调用解释为str.find()而不是Element.find()

我需要我的代码从XML文件中获取来自各种Element对象的文本,在某些情况下,我需要使用str方法对其进行修改。如何在不改变解释器解释object.find()的方式的情况下做到这一点?这是我的代码:

import xml.etree.ElementTree as xml
import re
import json
pattern = re.compile('[a-z,0-9,-]+')
c_pattern = re.compile('[caption[^]]+]')
c2_pattern = re.compile('[/caption]')
tree = xml.parse('file.xml')
root = tree.getroot()
for item in root.iter('item'):
if item.find('{http://wordpress.org/export/1.2/}post_type').text == 'post':
t = item.find('{http://purl.org/rss/1.0/modules/content/}encoded').text
print item.find
try:
t = t.encode('utf-8')
o_cap = re.findall(c_pattern,t)
e_cap = re.findall(c2_pattern,t)
for item in o_cap:
t = t.replace(item,'') 
for item in e_cap:
t = t.replace(item,'')           
except:
t = 'None'
print item.find
title = item.find('title').text

第一个print语句返回<bound method Element.find of <Element 'item' at 0x2a7a7d0>>,而第二个返回<built-in method find of str object at 0x2b56e00>

我尝试过对Element进行子类化,但我不知道如何使XML文件中的Element节点成为新子类的对象。我也尝试过简单地定义一个引用Element.find()方法的新方法,但当我尝试使用它时,解释器只是告诉我,Element对象没有我的用户定义方法的名称。

我想到的另一种方法是某种

from xml.etree.ElementTree import Element.find() as Element.some_other_name() 

但这不起作用(我尝试了很多语法变体,但它们也不起作用)。有人知道我能/应该做些什么来解决这个问题吗?

您正在痛击名称item。尝试将内部循环中的变量名切换为其他名称,如poop

for poop in o_cap:  
t = t.replace(poop,'') 
for poop in e_cap:
t = alvin.replace(poop,'')  

如果没有任何代码,我只能猜测。

被调用的方法总是来自你所引用的对象。如果你希望Element.find()运行,你就必须有一个Element对象。相反,您有一个来自replace()str对象。

一种方法是用replace()结果替换Element的内容,然后再像处理原始结果一样处理它。

最新更新