Python:读取文本文件的一部分

4 python

大家好

我是python和编程的新手.我需要读取大块文本文件的块,格式如下所示:

<word id="8" form="hibernis" lemma="hibernus1" postag="n-p---nb-" head-"7" relation="ADV"/>
Run Code Online (Sandbox Code Playgroud)

我需要的form,lemmapostag信息.例如,对于我需要的hibernis,hibernus1以及n-p---nb-.

如何告诉python读取它到达表单,向前读取直到它到达引号",然后读取引号之间的信息"hibernis"?真的很挣扎.

到目前为止,我的尝试是删除标点符号,拆分句子然后从列表中提取我需要的信息.虽然让python迭代整个文件有困难,但我只能让它工作1行.我的代码如下:

f=open('blank.txt','r')
quotes=f.read()
noquotes=quotes.replace('"','')
f.close()

rf=open('blank.txt','w')
rf.write(noquotes)
rf.close()   

f=open('blank.txt','r')
finished = False
postag=[]
while not finished:
   line=f.readline()
   words=line.split()
   postag.append(words[4])
   postag.append(words[6])
   postag.append(words[8])              
   finished=True
Run Code Online (Sandbox Code Playgroud)

非常感谢任何反馈/批评

谢谢

Jon*_*ric 5

如果是XML,请使用ElementTree来解析它:

from xml.etree import ElementTree

line = '<word id="8" form="hibernis" lemma="hibernus1" postag="n-p---nb-" head="7" relation="ADV"/>'

element = ElementTree.fromstring(line)
Run Code Online (Sandbox Code Playgroud)

对于每个XML元素,您可以轻松提取名称和所有属性:

>>> element.tag
'word'
>>> element.attrib
{'head': '7', 'form': 'hibernis', 'postag': 'n-p---nb-', 'lemma': 'hibernus1', 'relation': 'ADV', 'id': '8'}
Run Code Online (Sandbox Code Playgroud)

因此,如果您有一个包含大量wordXML元素的文档,那么这样的内容将从每个元素中提取您想要的信息:

from xml.etree import ElementTree

XML = '''
<words>
    <word id="8" form="hibernis" lemma="hibernus1" postag="n-p---nb-" head="7" relation="ADV"/>
</words>'''

root = ElementTree.fromstring(XML)

for element in root.findall('word'):
    form = element.attrib['form']
    lemma = element.attrib['lemma']
    postag = element.attrib['postag']

    print form, lemma, postag
Run Code Online (Sandbox Code Playgroud)

如果您只有文件名,请使用parse()而不是fromstring().