字典去重 YYDS
然后再寫入excel 表 yyds
#!/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 = {"姓名": [], "次數(shù)": []}
for _it in AUTHORS_UNIQU:
TotalExcel["姓名"].append(_it)
TotalExcel["次數(shù)"].append(AUTHORS_UNIQU[_it])
Excel = {"分支": [], "倉庫名稱": [], "提交者": [], "提交日期": [], "提交次數(shù)": []}
for it in DATE_UNIQU:
Excel["分支"].append(it[0])
Excel["倉庫名稱"].append(it[1])
Excel["提交者"].append(it[2])
Excel["提交日期"].append(it[3])
Excel["提交次數(shù)"].append(DATE_UNIQU[it])
writer = pds.ExcelWriter(date[0] + "~" + date[len(date) - 1] + ".xlsx")
excekWrute2 = pds.DataFrame(TotalExcel)
excekWrute2.to_excel(writer, sheet_name="統(tǒng)計總表")
execlWrite1 = pds.DataFrame(Excel)
execlWrite1.to_excel(writer, sheet_name="各倉庫統(tǒng)計")
writer.close()
保存成excel 表格輸出
YYDS … …
添加一個繪圖功能
#!/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 = {"姓名": [], "次數(shù)": []}
for _it in AUTHORS_UNIQU:
TotalExcel["姓名"].append(_it)
TotalExcel["次數(shù)"].append(AUTHORS_UNIQU[_it])
Excel = {"倉庫名稱": [], "分支": [], "提交者": [], "提交日期": [], "提交次數(shù)": []}
for it in DATE_UNIQU:
Excel["倉庫名稱"].append(it[1])
Excel["分支"].append(it[0])
Excel["提交者"].append(it[2])
Excel["提交日期"].append(it[3])
Excel["提交次數(shù)"].append(DATE_UNIQU[it])
repoSheet: dict = {}
for it in DATE_UNIQU:
repoSheet[it[1]] = {"提交者": [], "分支": [], "提交次數(shù)": [], "提交日期": []}
for it in DATE_UNIQU:
repoSheet[it[1]]["提交者"].append(it[2])
repoSheet[it[1]]["分支"].append(it[0])
repoSheet[it[1]]["提交次數(shù)"].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="統(tǒng)計總表")
execlWrite1 = pds.DataFrame(Excel)
execlWrite1.to_excel(writer, sheet_name="各倉庫統(tǒng)計原始記錄")
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]["提交次數(shù)"][i]
ax[_cnts].bar(
list(x for x in commitTimes), list(commitTimes[x] for x in commitTimes)
)
_cnts += 1
plt.show()
很有趣的小工具 heartrate
實用的小腳本
#!/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 = {"姓名": [], "次數(shù)": []}
for _it in AUTHORS_UNIQU:
TotalExcel["姓名"].append(_it)
TotalExcel["次數(shù)"].append(AUTHORS_UNIQU[_it])
Excel = {"倉庫名稱": [], "分支": [], "提交者": [], "提交日期": [], "提交次數(shù)": []}
for it in DATE_UNIQU:
Excel["倉庫名稱"].append(it[1])
Excel["分支"].append(it[0])
Excel["提交者"].append(it[2])
Excel["提交日期"].append(it[3])
Excel["提交次數(shù)"].append(DATE_UNIQU[it])
repoSheet: dict = {}
for it in DATE_UNIQU:
repoSheet[it[1]] = {"提交者": [], "分支": [], "提交次數(shù)": [], "提交日期": []}
for it in DATE_UNIQU:
repoSheet[it[1]]["提交者"].append(it[2])
repoSheet[it[1]]["分支"].append(it[0])
repoSheet[it[1]]["提交次數(shù)"].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="統(tǒng)計總表")
execlWrite1 = pds.DataFrame(Excel)
execlWrite1.to_excel(writer, sheet_name="各倉庫統(tǒng)計原始記錄")
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]["提交次數(shù)"][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["提交次數(shù)"][it]),
)
console = Console()
console.print(table, justify="center")
終端打印 表格 ??文章來源:http://www.zghlxwxcb.cn/news/detail-622304.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-622304.html
到了這里,關(guān)于python 統(tǒng)計所有的 倉庫 提交者的提交次數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!