我想创建一个文本文件(下面的repo中的txt文件),其中包含XML文件(repo中的xml文件)中的诗歌行,每行包含在" l&#34中;标签。问题是,其中三条线路有一个令人烦恼的里程碑"导致我的代码(py文件)在写入新文件时忽略该行的元素。有人可以帮忙吗?
具体来说,我想要类似的东西:
<l><milestone ed="P" unit="Para"/>τίς τ᾽ ἄρ σφωε θεῶν ἔριδι ξυνέηκε μάχεσθαι;</l>
......以与以下相同的方式对待:
<l>τίς τ᾽ ἄρ σφωε θεῶν ἔριδι ξυνέηκε μάχεσθαι;</l>
输入文件取自https://github.com/DLibatique/texts/tree/master/iliad
(我知道代码很乱,并且有很多方法可以干掉它并更好地设置我的repo结构 - 只是先试着先把基本的想法放下来然后再把它弄清楚。)
代码:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import xml.etree.ElementTree as ET
tree = ET.parse('iliad_1_1-32.xml')
root = tree.getroot()
file = open('iliad_1_1-32.txt','w')
for l in root.iter('l'):
file.write(str(l.text) + "\n")
file.close()
XML:
<?xml version="1.0" encoding="utf-8"?>
<text>
<body>
<div1 type="Book" n="1" org="uniform" sample="complete">
<milestone ed="p" n="1" unit="card"/>
<l><milestone ed="P" unit="para"/>μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος</l>
<l>οὐλομένην, ἣ μυρί᾽ Ἀχαιοῖς ἄλγε᾽ ἔθηκε,</l>
<l>πολλὰς δ᾽ ἰφθίμους ψυχὰς Ἄϊδι προΐαψεν</l>
<l>ἡρώων, αὐτοὺς δὲ ἑλώρια τεῦχε κύνεσσιν</l>
<l n="5">οἰωνοῖσί τε πᾶσι, Διὸς δ᾽ ἐτελείετο βουλή,</l>
<l>ἐξ οὗ δὴ τὰ πρῶτα διαστήτην ἐρίσαντε</l>
<l>Ἀτρεΐδης τε ἄναξ ἀνδρῶν καὶ δῖος Ἀχιλλεύς.</l>
<l><milestone ed="P" unit="Para"/>τίς τ᾽ ἄρ σφωε θεῶν ἔριδι ξυνέηκε μάχεσθαι;</l>
<l>Λητοῦς καὶ Διὸς υἱός: ὃ γὰρ βασιλῆϊ χολωθεὶς</l>
<l n="10">νοῦσον ἀνὰ στρατὸν ὄρσε κακήν, ὀλέκοντο δὲ λαοί,</l>
<l>οὕνεκα τὸν Χρύσην ἠτίμασεν ἀρητῆρα</l>
<l>Ἀτρεΐδης: ὃ γὰρ ἦλθε θοὰς ἐπὶ νῆας Ἀχαιῶν</l>
<l>λυσόμενός τε θύγατρα φέρων τ᾽ ἀπερείσι᾽ ἄποινα,</l>
<l>στέμματ᾽ ἔχων ἐν χερσὶν ἑκηβόλου Ἀπόλλωνος</l>
<l n="15">χρυσέῳ ἀνὰ σκήπτρῳ, καὶ λίσσετο πάντας Ἀχαιούς,</l>
<l>Ἀτρεΐδα δὲ μάλιστα δύω, κοσμήτορε λαῶν:</l>
<l>Ἀτρεΐδαι τε καὶ ἄλλοι ἐϋκνήμιδες Ἀχαιοί,</l>
<l>ὑμῖν μὲν θεοὶ δοῖεν Ὀλύμπια δώματ᾽ ἔχοντες</l>
<l>ἐκπέρσαι Πριάμοιο πόλιν, εὖ δ᾽ οἴκαδ᾽ ἱκέσθαι:</l>
<l n="20">παῖδα δ᾽ ἐμοὶ λύσαιτε φίλην, τὰ δ᾽ ἄποινα δέχεσθαι,</l>
<l>ἁζόμενοι Διὸς υἱὸν ἑκηβόλον Ἀπόλλωνα.</l>
<l><milestone ed="P" unit="para"/>ἔνθ᾽ ἄλλοι μὲν πάντες ἐπευφήμησαν Ἀχαιοὶ</l>
<l>ἀλλ᾽ οὐκ Ἀτρεΐδῃ Ἀγαμέμνονι ἥνδανε θυμῷ,</l>
<l n="25">ἀλλὰ κακῶς ἀφίει, κρατερὸν δ᾽ ἐπὶ μῦθον ἔτελλε:</l>
<l>μή σε γέρον κοίλῃσιν ἐγὼ παρὰ νηυσὶ κιχείω</l>
<l>ἢ νῦν δηθύνοντ᾽ ἢ ὕστερον αὖτις ἰόντα,</l>
<l>μή νύ τοι οὐ χραίσμῃ σκῆπτρον καὶ στέμμα θεοῖο:</l>
<l>τὴν δ᾽ ἐγὼ οὐ λύσω: πρίν μιν καὶ γῆρας ἔπεισιν</l>
<l n="30">ἡμετέρῳ ἐνὶ οἴκῳ ἐν Ἄργεϊ τηλόθι πάτρης</l>
<l>ἱστὸν ἐποιχομένην καὶ ἐμὸν λέχος ἀντιόωσαν:</l>
<l>ἀλλ᾽ ἴθι μή μ᾽ ἐρέθιζε σαώτερος ὥς κε νέηαι.</l>
</div1>
</body>
</text>
答案 0 :(得分:0)
您可以使用tail
迭代所有文本字段,甚至是嵌套元素内部的文本字段(或在封闭元素的for l in root.iter('l'):
file.write(''.join(l.itertext()) + "\n")
上),如此处所示:
... a b c d e f
2740 String 2017-11-20 1020.26 1018.38 1022.61 1017.50
2741 String 2017-11-21 1023.31 1034.49 1035.11 1022.66
2742 String 2017-11-22 1035.00 1035.96 1039.71 1031.43