字典去重 YYDS
然后再写入excel 表 yyds
python
#!/bin/env python3
from git.repo import Repo
import os
import pandas as pds
path = "/home/labstation/workqueue/sw"
url = "git@10.0.128.128"
date = [str(x) for x in range(202307, 202308)]
datefmt = "%Y%m"
counts = 0
AUTHORS = {}
AUTHORS_UNIQU = {}
DATE = {}
DATE_UNIQU = {}
for proj in os.scandir(path):
if not os.access(path + "/" + proj.name + "/.git", os.F_OK):
continue
repo = Repo(path + "/" + proj.name)
remoteUrl = repo.git.execute(["git", "remote", "-v"])
if type(remoteUrl) is str:
remoteUrl = map(lambda x: x.strip("\t"), remoteUrl.split("\n"))
for checkUrl in remoteUrl:
if checkUrl.find(url) > 0:
continue
res = repo.git.execute(["git", "branch", "-r"])
if type(res) is str and len(res) != 0:
branches = filter(
lambda x: not x.startswith("origin/HEAD"),
map(lambda x: x.strip(" "), res.split("\n")),
)
for it_branch in branches:
for it in repo.iter_commits(it_branch):
if it.authored_datetime.strftime(datefmt) in date:
AUTHORS[str(it)] = it.author.name
DATE[str(it)] = (
it_branch,
proj.name,
it.author.name,
it.authored_datetime.strftime(datefmt),
)
for _it in AUTHORS:
AUTHORS_UNIQU[AUTHORS[_it]] = 0
for _it in AUTHORS_UNIQU:
for _its in AUTHORS:
if _it == AUTHORS[_its]:
AUTHORS_UNIQU[_it] += 1
for _it in DATE:
DATE_UNIQU[DATE[_it]] = 0
for _it in DATE_UNIQU:
for _its in DATE:
if _it == DATE[_its]:
DATE_UNIQU[_it] += 1
TotalExcel = {"姓名": [], "次数": []}
for _it in AUTHORS_UNIQU:
TotalExcel["姓名"].append(_it)
TotalExcel["次数"].append(AUTHORS_UNIQU[_it])
Excel = {"分支": [], "仓库名称": [], "提交者": [], "提交日期": [], "提交次数": []}
for it in DATE_UNIQU:
Excel["分支"].append(it[0])
Excel["仓库名称"].append(it[1])
Excel["提交者"].append(it[2])
Excel["提交日期"].append(it[3])
Excel["提交次数"].append(DATE_UNIQU[it])
writer = pds.ExcelWriter(date[0] + "~" + date[len(date) - 1] + ".xlsx")
excekWrute2 = pds.DataFrame(TotalExcel)
excekWrute2.to_excel(writer, sheet_name="统计总表")
execlWrite1 = pds.DataFrame(Excel)
execlWrite1.to_excel(writer, sheet_name="各仓库统计")
writer.close()
保存成excel 表格输出
YYDS ... ...
添加一个绘图功能
python
#!/bin/env python3
from git.repo import Repo
import os
import pandas as pds
import matplotlib.pyplot as plt
path = "/home/code/workqueue"
url = "git@10.0.128.128"
date = [str(x) for x in range(20230701, 20230732)]
datefmt = "%Y%m%d"
counts = 0
AUTHORS = {}
AUTHORS_UNIQU = {}
DATE = {}
DATE_UNIQU = {}
for proj in os.scandir(path):
if not os.access(path + "/" + proj.name + "/.git", os.F_OK):
continue
repo = Repo(path + "/" + proj.name)
remoteUrl = repo.git.execute(["git", "remote", "-v"])
if type(remoteUrl) is str:
remoteUrl = map(lambda x: x.strip("\t"), remoteUrl.split("\n"))
for checkUrl in remoteUrl:
if checkUrl.find(url) > 0:
continue
res = repo.git.execute(["git", "branch", "-r"])
if type(res) is str and len(res) != 0:
branches = filter(
lambda x: not x.startswith("origin/HEAD"),
map(lambda x: x.strip(" "), res.split("\n")),
)
for it_branch in branches:
for it in repo.iter_commits(it_branch):
if it.authored_datetime.strftime(datefmt) in date:
AUTHORS[str(it)] = it.author.email
DATE[str(it)] = (
it_branch,
proj.name,
it.author.email,
it.authored_datetime.strftime(datefmt),
)
for _it in AUTHORS:
AUTHORS_UNIQU[AUTHORS[_it]] = 0
for _it in AUTHORS_UNIQU:
for _its in AUTHORS:
if _it == AUTHORS[_its]:
AUTHORS_UNIQU[_it] += 1
for _it in DATE:
DATE_UNIQU[DATE[_it]] = 0
for _it in DATE_UNIQU:
for _its in DATE:
if _it == DATE[_its]:
DATE_UNIQU[_it] += 1
TotalExcel = {"姓名": [], "次数": []}
for _it in AUTHORS_UNIQU:
TotalExcel["姓名"].append(_it)
TotalExcel["次数"].append(AUTHORS_UNIQU[_it])
Excel = {"仓库名称": [], "分支": [], "提交者": [], "提交日期": [], "提交次数": []}
for it in DATE_UNIQU:
Excel["仓库名称"].append(it[1])
Excel["分支"].append(it[0])
Excel["提交者"].append(it[2])
Excel["提交日期"].append(it[3])
Excel["提交次数"].append(DATE_UNIQU[it])
repoSheet: dict = {}
for it in DATE_UNIQU:
repoSheet[it[1]] = {"提交者": [], "分支": [], "提交次数": [], "提交日期": []}
for it in DATE_UNIQU:
repoSheet[it[1]]["提交者"].append(it[2])
repoSheet[it[1]]["分支"].append(it[0])
repoSheet[it[1]]["提交次数"].append(DATE_UNIQU[it])
repoSheet[it[1]]["提交日期"].append(it[3])
if os.path.exists(date[0] + "~" + date[len(date) - 1] + ".xlsx"):
os.remove(date[0] + "~" + date[len(date) - 1] + ".xlsx")
writer = pds.ExcelWriter(date[0] + "~" + date[len(date) - 1] + ".xlsx")
excekWrute2 = pds.DataFrame(TotalExcel)
excekWrute2.to_excel(writer, sheet_name="统计总表")
execlWrite1 = pds.DataFrame(Excel)
execlWrite1.to_excel(writer, sheet_name="各仓库统计原始记录")
for it in repoSheet:
t = pds.DataFrame(repoSheet[it])
t.to_excel(writer, sheet_name=it)
writer.close()
Total = 0
ax = []
for it in pds.unique(Excel["仓库名称"]):
Total += 1
_cnts = 0
fig = plt.figure()
for it in pds.unique(Excel["仓库名称"]):
ax.append(fig.add_subplot(int(Total / 4) + 1, 4, _cnts + 1))
ax[_cnts].set_title(it)
# FIXME have some bug
commitTimes = {}
for _it in repoSheet[it]["提交者"]:
commitTimes[_it] = 0
for i in range(0, len(repoSheet[it]["提交者"])):
commitTimes[repoSheet[it]["提交者"][i]] += repoSheet[it]["提交次数"][i]
ax[_cnts].bar(
list(x for x in commitTimes), list(commitTimes[x] for x in commitTimes)
)
_cnts += 1
plt.show()
很有趣的小工具 heartrate
实用的小脚本
python
#!/bin/env python3
from git.repo import Repo
import os
import pandas as pds
import matplotlib.pyplot as plt
from rich.console import Console
from rich.table import Table
import time
path = "/home/code/workqueue"
url = "git@10.0.128.128"
date = [str(x) for x in range(20230101, 20230832)]
datefmt = "%Y%m%d"
counts = 0
AUTHORS = {}
AUTHORS_UNIQU = {}
DATE = {}
DATE_UNIQU = {}
SHOW_PLOT = False
SHOW_TABLE = True
SAVE_XLSX = False
AUTHOR_ONE = ["hong_da_yu@163.com"]
for proj in os.scandir(path):
if not os.access(path + "/" + proj.name + "/.git", os.F_OK):
continue
repo = Repo(path + "/" + proj.name)
remoteUrl = repo.git.execute(["git", "remote", "-v"])
if type(remoteUrl) is str:
remoteUrl = map(lambda x: x.strip("\t"), remoteUrl.split("\n"))
for checkUrl in remoteUrl:
if checkUrl.find(url) > 0:
continue
res = repo.git.execute(["git", "branch", "-r"])
if type(res) is str and len(res) != 0:
branches = filter(
lambda x: not x.startswith("origin/HEAD"),
map(lambda x: x.strip(" "), res.split("\n")),
)
for it_branch in branches:
for it in repo.iter_commits(it_branch):
if it.authored_datetime.strftime(datefmt) in date:
AUTHORS[str(it)] = it.author.email
DATE[str(it)] = (
it_branch,
proj.name,
it.author.email,
it.authored_datetime.strftime(datefmt),
)
for _it in AUTHORS:
AUTHORS_UNIQU[AUTHORS[_it]] = 0
for _it in AUTHORS_UNIQU:
for _its in AUTHORS:
if _it == AUTHORS[_its]:
AUTHORS_UNIQU[_it] += 1
for _it in DATE:
DATE_UNIQU[DATE[_it]] = 0
for _it in DATE_UNIQU:
for _its in DATE:
if _it == DATE[_its]:
DATE_UNIQU[_it] += 1
TotalExcel = {"姓名": [], "次数": []}
for _it in AUTHORS_UNIQU:
TotalExcel["姓名"].append(_it)
TotalExcel["次数"].append(AUTHORS_UNIQU[_it])
Excel = {"仓库名称": [], "分支": [], "提交者": [], "提交日期": [], "提交次数": []}
for it in DATE_UNIQU:
Excel["仓库名称"].append(it[1])
Excel["分支"].append(it[0])
Excel["提交者"].append(it[2])
Excel["提交日期"].append(it[3])
Excel["提交次数"].append(DATE_UNIQU[it])
repoSheet: dict = {}
for it in DATE_UNIQU:
repoSheet[it[1]] = {"提交者": [], "分支": [], "提交次数": [], "提交日期": []}
for it in DATE_UNIQU:
repoSheet[it[1]]["提交者"].append(it[2])
repoSheet[it[1]]["分支"].append(it[0])
repoSheet[it[1]]["提交次数"].append(DATE_UNIQU[it])
repoSheet[it[1]]["提交日期"].append(it[3])
if SAVE_XLSX:
if os.path.exists(date[0] + "~" + date[len(date) - 1] + ".xlsx"):
os.remove(date[0] + "~" + date[len(date) - 1] + ".xlsx")
writer = pds.ExcelWriter(date[0] + "~" + date[len(date) - 1] + ".xlsx")
excekWrute2 = pds.DataFrame(TotalExcel)
excekWrute2.to_excel(writer, sheet_name="统计总表")
execlWrite1 = pds.DataFrame(Excel)
execlWrite1.to_excel(writer, sheet_name="各仓库统计原始记录")
for it in repoSheet:
t = pds.DataFrame(repoSheet[it])
t.to_excel(writer, sheet_name=it)
writer.close()
# NOTE: FIX BUG OKAY
if SHOW_PLOT:
Total = 0
ax = []
for it in pds.unique(Excel["仓库名称"]):
Total += 1
_cnts = 0
fig = plt.figure()
for it in pds.unique(Excel["仓库名称"]):
ax.append(fig.add_subplot(int(Total / 4) + 1, 4, _cnts + 1))
ax[_cnts].set_title(it)
commitTimes = {}
for _it in repoSheet[it]["提交者"]:
commitTimes[_it] = 0
for i in range(0, len(repoSheet[it]["提交者"])):
commitTimes[repoSheet[it]["提交者"][i]] += repoSheet[it]["提交次数"][i]
ax[_cnts].bar(
list(x for x in commitTimes), list(commitTimes[x] for x in commitTimes)
)
_cnts += 1
plt.show()
if SHOW_TABLE:
table = Table(title=time.strftime("%Y-%m-%d", time.localtime()))
for it in Excel:
table.add_column(it, style="cyan", no_wrap=True)
for it in range(0, len(Excel["仓库名称"])):
if Excel["提交者"][it] in AUTHOR_ONE:
table.add_row(
Excel["仓库名称"][it],
Excel["分支"][it],
Excel["提交者"][it],
Excel["提交日期"][it],
str(Excel["提交次数"][it]),
)
console = Console()
console.print(table, justify="center")
终端打印 表格 😊