我目前正在尝试编写一个小的Python脚本来解析SVN .diff
文件,并将结果写入.csv
,可以在Microsoft Excel或类似程序中轻松打开。但是,我坚持解析部分,更准确地说是在线分类。我要解析的文件如下所示。
- <name key="first.key">Old string 1</name>
- <name key="second.key">Old string 2</name>
+ <name key="first.key">New string 1</name>
+ <name key="second.key">New string 2</name>
+ <name key="third.key">Another new string</name>
...
为了轻松解析文件并将彼此相邻的密钥写入表中,我需要按密钥对对其进行排序,因此它看起来如下所示。这样,我就可以轻松地浏览文件了。
- <name key="first.key">Old string 1</name>
+ <name key="first.key">New string 1</name>
- <name key="second.key">Old string 2</name>
+ <name key="second.key">New string 2</name>
+ <name key="third.key">Another new string</name>
...
是否有内置方法可以进行此类排序或简单替代?
答案 0 :(得分:3)
是的,有!您可以将sorted
(或sort
)函数与您自己的排序函数一起使用:
import re
pattern = re.compile(r'\<name key="(.*)">(.*)<\/name>')
def sorter(pair):
return pattern.match(pair).groups()
print(sorted(list_of_lines, key=sorter))
答案 1 :(得分:2)
通过实施&#39;密钥&#39;有许多方法可以做到这一点。在sorted()中。这是一个粗略方法的演示。
>>> for l in data:
... print l
...
- <name key="first.key">String</name>
- <name key="second.key">String</name>
+ <name key="first.key">String</name>
+ <name key="second.key">String</name>
+ <name key="third.key">String</name>
>>> for l in sorted(data, key=lambda s: s[1:s.index('.key')]):
... print l
...
- <name key="first.key">String</name>
+ <name key="first.key">String</name>
- <name key="second.key">String</name>
+ <name key="second.key">String</name>
+ <name key="third.key">String</name>