我用python把SVN的XML日志转换成CSV。。。在
#!/usr/bin/env python
import csv
import subprocess
import sys
import xml.etree.cElementTree as etree
log_text = subprocess.Popen(['svn', 'log', '--xml'] + sys.argv[1:],
stdout=subprocess.PIPE).communicate()[0]
log_xml = etree.XML(log_text)
csv_writer = csv.writer(sys.stdout)
for child in log_xml.getchildren():
csv_writer.writerow([
child.attrib['revision'],
child.findtext('date'),
child.findtext('author').encode('utf-8'),
child.findtext('msg').encode('utf-8'),
])
它将给出输出,例如。。。在
^{pr2}$但是我想过滤/解析<msg>
,以便在创建.csv输出时只提取票证号。在
使用perl等任何替代方法都不是问题。在
更新:跳过注释(<msg>
)中没有罚单的修订日志的任何方法
这里有一个简单的解决方案:查找单词Ticket后面的第一个数字:
使用Perl语法,但在Python中也应该很容易。在
这里是对Python版本的一个尝试(注意,我不是Python程序员):
^{pr2}$正则表达式
Ticket\D+(\d+)
匹配单词票证,然后匹配一个或多个不是数字的字符(\D+
),然后是一个或多个数字(\d+
)。括号捕获第一个匹配组中模式的封闭部分。在如果您想让匹配更具体,可以使用
(\d{8})
来确保票号有8位数字。在更新:这两个解决方案都使用
if
语句来表示模式匹配。您可以跳过没有票号的行,只需跳过不匹配的行。在相关问题 更多 >
编程相关推荐