处理终端上的 Diffstat 输出

Dealing with Diffstat output on the terminal

这是我在终端上执行 diffstat 时的输出。将数字 133 和 85 分为两列到 CSV 文件中的最佳方法是什么?谢谢

README.md  |   88 +++++++++++++++++++++--------------------
home.html  |only
index.html |  130 ++++++++++++++++++++++++++++++++++++++++---------------------
libraries  |only
4 files changed, 133 insertions(+), 85 deletions(-)

假设您将差异写入文件 diff.txt,如下所示:

README.md  |   88 +++++++++++++++++++++--------------------
home.html  |only
index.html |  130 ++++++++++++++++++++++++++++++++++++++++---------------------
libraries  |only
4 files changed, 133 insertions(+), 85 deletions(-)

并且有一个 .csv 文件包含这些 headers:

insertions,deletions

那么这可以工作:

import re, csv

s = None

with open("diff.txt", mode="r") as diff_file:
    s = diff_file.readlines().pop()

regex = r"(?P<insertions>\d*) insertions\(\+\), (?P<deletions>\d*) deletions.*"
pattern = re.compile(regex)

match = pattern.search(s)

with open("diffs.csv", mode="a", newline="") as diffs_csv:
    fieldnames = ['insertions', 'deletions']
    writer = csv.DictWriter(diffs_csv, fieldnames=fieldnames)
    writer.writerow(match.groupdict())

这是我机器上的那个:

➜  diffstat ls
diffs.csv  diff.txt  main.py
➜  diffstat cat diffs.csv
insertions,deletions
➜  diffstat cat diff.txt
README.md  |   88 +++++++++++++++++++++--------------------
home.html  |only
index.html |  130 ++++++++++++++++++++++++++++++++++++++++---------------------
libraries  |only
4 files changed, 133 insertions(+), 85 deletions(-)
➜  diffstat python main.py
➜  diffstat cat diffs.csv
insertions,deletions
133,85

您可以像这样创建 diff.txt 文件和 运行 脚本:

git diff --stat > diff.txt & python main.py