【问题标题】:python text.strip() returns emptypython text.strip() 返回空
【发布时间】:2017-05-29 02:00:11
【问题描述】:

大家早上好; 我正在尝试使用此代码提取 SGML 文档,但结果是空文档,这是我的 python 代码:

from os import listdir
from os import makedirs
from os.path import isfile, join
from re import sub
import ast
import numpy
import xml.etree.ElementTree as ElementTree
from lxml import etree

parser = etree.XMLParser(recover=True) # escaping malformed strings
pathCol="C:/Users/Desktop/FR"
pathExtr="C:/Users/Desktop/FRExt"
i=0
for f in listdir(pathCol):
    with open(join(pathCol,f), 'r') as f:   # Reading file
        xml = f.read()

    xml = '<ROOT>' + xml + '</ROOT>'   # Let's add a root tag
    root = etree.fromstring(xml, parser=parser)
    for doc in root:
        try :
            docNo=doc.find('DOCNO').text.strip()
        except :
            i+=1
            docNo="LATIMES"+str(i)
        try : 
            text=doc.find('TEXT').text.strip()
        except :
            try :
                text=doc.find('HEADLINE').text.strip()
            except :
                try :
                    text=doc.find('GRAPHIC').text.strip()
                except :
                    text=" "

        fi=open(join(pathExtr,docNo),'w')
        fi.write(text)
        fi.close()
        print("%s OK" %(docNo))
    f.close()

这是一个示例文档的结构:

<DOC>
<DOCNO> LA010189-0001 </DOCNO>
<DOCID> 1 </DOCID>
<DATE>
<P>
January 1, 1989, Sunday, Home Edition 
</P>
</DATE>
<SECTION>
<P>
Book Review; Page 1; Book Review Desk 
</P>
</SECTION>
<LENGTH>
<P>
1206 words 
</P>
</LENGTH>
<HEADLINE>
<P>
NEW FALLOUT FROM CHERNOBYL; 
</P>
<P>
THE SOCIAL IMPACT OF THE ...
</P>
</HEADLINE>
<BYLINE>
<P>
By James E. ... 
</P>
</BYLINE>
<TEXT>
<P>
The onset of the new Gorbachev policy of glasnost,... 
</P>
...
</TEXT>
</DOC>
<DOC>
... etc
</DOC>

我想为&lt;DOC&gt;&lt;/DOC&gt; 之间的每个文档获取&lt;TEXT&gt; 标签之间的内容,而不是我有空文档:( 请问,有没有人可以帮助我? 非常感谢。

【问题讨论】:

    标签: xml document labels


    【解决方案1】:

    //ROOT/DOC/TEXTElement 中没有text node,这就是doc.find('TEXT').text 返回空字符串的原因。

    相反,您可以遍历 Element 节点(又名 &lt;P&gt;)。

    最后,要对Element 进行“字符串化”,您可以使用ET.tostring()

    TLDR

    text = ''.join(map(ET.tostring, doc.find('TEXT'))).strip()
    

    【讨论】:

    • 感谢您的回复,我会这样尝试。
    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 2017-03-18
    • 2016-02-27
    • 2020-10-13
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多