如何按内容对文件的输入行进行分区、排序、分组和写入outpu

2024-10-01 00:35:08 发布

您现在位置:Python中文网/ 问答频道 /正文

两个项目之间的diff命令的结果如下:

Only in xyz/666/aaazzz/000999/include: zerp.x
Files abc/666/aaazzz/000999/ggg.ddd.aus and xyz/666/aaazzz/000999/ggg.ddd.aus differ
Only in abc/666/aaazzz/000999: vuvuvu

我想编写一个python脚本来划分这个输出,如下所示

仅在xyz中:

666/aaazzz/000999/包括:zerp.x

共享但不同:

xyz/666/aaazzz/000999/ggg.ddd.aus

仅在abc中:

666/aaazzz/000999:vuvuvu

我想这可以由regex完成,因为行总是这样,这是命令的结果:

diff --brief -r project1/ project2/

但我不知道如何构造这样一个python脚本,它应该是什么样子


Tags: 项目in命令脚本onlyincludediffabc
1条回答
网友
1楼 · 发布于 2024-10-01 00:35:08

This可以工作,但并不完全健壮:

import re
text = "Only in xyz/666/aaazzz/000999/include: zerp.x\nFiles abc/666/aaazzz/000999/ggg.ddd.aus and xyz/666/aaazzz/000999/ggg.ddd.aus differ\nOnly in abc/666/aaazzz/000999: vuvuvu\n"

p = re.compile(r'([^\/]+)(.+)\nFiles\s.+\s(.+)\sdiffer\n([^\/]+)(.+)')
m = p.match(text)

print(m.group(1)+ ":")
print(m.group(2))
print("Shared but different:")
print(m.group(3))
print(m.group(4) + ":")
print(m.group(5))

结果:

Only in xyz:
/666/aaazzz/000999/include: zerp.x
Shared but different:
xyz/666/aaazzz/000999/ggg.ddd.aus
Only in abc:
/666/aaazzz/000999: vuvuvu

我需要更多的例子和边缘案件,使它更好。也可以在每行的基础上做得更好(例如,在我使用\n的地方分解regex)

正则表达式除了非常容易混淆外,唯一可能混淆的部分是([^\/]+)——它捕获除/之外的所有字符,因此它可以捕获文件名(xyzabc

相关问题 更多 >