Python 3.x Python中的XML解析问题
我正在尝试解析XML文件(字幕)的以下内容(这里只是一块) 但它的回报是:Python 3.x Python中的XML解析问题,python-3.x,xml,xml-parsing,Python 3.x,Xml,Xml Parsing,我正在尝试解析XML文件(字幕)的以下内容(这里只是一块) 但它的回报是: ['', '', '- Tu es sérieuse ?', 'Regarde ce que tu as fait.', '', "On peut faire quelque chose, je m'ennuie....", '', '', "J'ai promis à Stuart de l'appeler.", '', '- A tes ordres.', ..... 如果在实际文本之前有ID时间/值行
['', '', '- Tu es sérieuse ?', 'Regarde ce que tu as fait.',
'', "On peut faire quelque chose, je m'ennuie....", '', '',
"J'ai promis à Stuart de l'appeler.", '', '- A tes ordres.',
.....
如果在实际文本之前有ID时间/值行,我似乎找不到一种方法来获取“/s”的文本值
有什么帮助吗?使用lxml尝试一下:
import lxml.html
subt = [your html above]
doc = lxml.html.fromstring(subt)
dialog = doc.xpath('//*/text()')
myPhrasesArray = []
for d in dialog:
if len(d.strip())>0:
myPhrasesArray.append(d.strip())
myPhrasesArray
输出:
["- Le requin t'a eue.",
'- Tu es sérieuse ?',
'Regarde ce que tu as fait.',
"Je vais t'en chercher un autre.",
"On peut faire quelque chose, je m'ennuie...."]
您不想在根目录中对q执行
,而只想迭代s
标记
您可以使用ElementTree.iter()
或ElementTree.findall()
。前者看一切,不管有多深。后者只关注直接的孩子。对于您给出的示例,findall()
更有意义
myPhrasesArray = [] # just start with it empty
for s in root.findall('s'):
myPhrasesArray.append(s.text)
鉴于这非常简单,您甚至可以在一行中完成:
myPhrasesArray = [s.text for s in root.findall('s')]
就这样解决了
parsedXml = ET.parse("data/tst/1914/"+ str(filename))
root = parsedXml.getroot()
for child in root:
try:
if child.tag == "s":
a = ''.join(child.itertext()).strip().lower()
if a.startswith("-"):
a = a.lstrip("-")
mySentences.append(a)
根中的q
是每个标记,但是time
标记有空文本。你想对时间标签做什么?我想得到所有的文本行,然后扔掉计时器。并将这些文本语句存储在一个数组中,使用.itertext将其排序,因为findall或iter都不起作用(一开始就尝试过),如果有人感兴趣,我会提供一个代码示例作为答案
myPhrasesArray = [s.text for s in root.findall('s')]
parsedXml = ET.parse("data/tst/1914/"+ str(filename))
root = parsedXml.getroot()
for child in root:
try:
if child.tag == "s":
a = ''.join(child.itertext()).strip().lower()
if a.startswith("-"):
a = a.lstrip("-")
mySentences.append(a)