Python按特殊字符排序(+/-)

时间:2015-03-25 10:01:31

标签: python regex

我目前正在尝试编写一个小的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>
...

是否有内置方法可以进行此类排序或简单替代?

2 个答案:

答案 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>