Python 按标记内容对XML文件排序
我有很多未排序的XML文件。我想按名为“title”的标记内容对它们进行排序。我知道头衔的顺序: 1.)社论 2.)内容 3)俱乐部 等 每个文件都有另一个“标题”-内容 文件编号1的XML结构如下所示:Python 按标记内容对XML文件排序,python,xml,xml-parsing,Python,Xml,Xml Parsing,我有很多未排序的XML文件。我想按名为“title”的标记内容对它们进行排序。我知道头衔的顺序: 1.)社论 2.)内容 3)俱乐部 等 每个文件都有另一个“标题”-内容 文件编号1的XML结构如下所示: <article> <someTags> </someTags> <title>editorial</title> </article> 社论 如何遍历所有文件并按定义的顺序对其进行排序? 文件名可以是:“sorte
<article>
<someTags>
</someTags>
<title>editorial</title>
</article>
社论
如何遍历所有文件并按定义的顺序对其进行排序?
文件名可以是:“sorted_01.xml”、“sorted_02.xml”等等。
我怎么能得到这个?
非常感谢您的帮助!:) 使用或与返回title
标记文本的函数一起作为键函数
import glob
import xml.etree.ElementTree as ET
def get_title(filepath):
tree = ET.parse(filepath)
return tree.find('.//title').text
# Find `title` element and return the text of the element.
filepaths = glob.glob('*.xml')
print(sorted(filepaths, key=get_title))
请参阅。另一种方法(未经测试)
对于给定的xml示例,我们无法理解xml的结构。您是否可以发布另一个至少包含2个
title
标记的示例?每个文件正好有一个title标记。内容不同。标题内容为“编辑”的文件应成为第一个文件,标题内容为“内容”的文件应成为第二个文件,依此类推:)简单地使用for
循环(特别是当列表理解中的表达式没有产生有意义的值+有副作用时)我没有测试你的代码,但是您的代码将无法工作,因为xpath
返回一个不可散列的列表;不能用作字典键。除此之外,代码没有填充arr
list.update,您的两条评论都是正确的(还有您的代码):)谢谢@falsetruor我误解了。:)但是如何确定文件的保存顺序呢?我的意思是:包含“编辑”-标题内容的文件应保存为01.xml,包含“内容”-标题内容的文件应保存为“02.xml”,依此类推。我必须在列表中保存标签内容的顺序,不是吗?顺便说一句:谢谢你的帮助!:)@马克,我好像误解了你的问题。看看盖伊·加弗里利的答案。
import glob, os
from lxml import etree
d = {}
titles = ['editorial', 'content' , 'club', ...] # ordered titles
for fname in glob.glob('*.xml'):
tree = etree.parse(fname)
title = tree.xpath('//title/text()')[0]
subtitle = tree.xpath('//subtitle/text()')[0]
key = '%s_%s' % (title, subtitle)
d[key] = fname
for idx,title in enumerate(titles, 1):
os.rename(d[title], 'sorted_%02d.xml' % idx)