python 统计所有的 仓库 提交者的提交次数

这篇具有很好参考价值的文章主要介绍了python 统计所有的 仓库 提交者的提交次数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

字典去重 YYDS

python 统计所有的 仓库 提交者的提交次数,Linux,linux

然后再写入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 = {"姓名": [], "次数": []}

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 … …

添加一个绘图功能

#!/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 统计所有的 仓库 提交者的提交次数,Linux,linux

实用的小脚本

#!/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")

终端打印 表格 😊

python 统计所有的 仓库 提交者的提交次数,Linux,linux文章来源地址https://www.toymoban.com/news/detail-622304.html

到了这里,关于python 统计所有的 仓库 提交者的提交次数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 对于 Git 每一次提交的时间信息,什么是作者日期和提交者日期

    对于 Git 的每一次提交,在 TortoiseGit 和 IntelliJ IDEA 都可以看到这次提交的时间。但很多人不知道的是,Git 实际上对每一个提交的时间分为两个:作者日期和提交者日期。 作者日期(author date):这指的是最开始提交时,所产生的提交文件上的日期 提交者日期(committer date):

    2024年02月05日
    浏览(48)
  • Visual Studio 2019代码上不显示git提交者

    我们一般使用vscode编写前端代码,使用vs编写后端代码 如下图,我发现vscode的每行代码后边都有git的提交者记录,觉得这个功能甚好,所以查了一下vs能不能也有这个功能,结论:社区版没有,企业版和专业版有 这个功能在哪里呢? Visual Studio页面: 工具–选项–文本编辑器

    2024年02月15日
    浏览(43)
  • Python统计一个字符串中所有字符在另一个字符串出现的总次数

    代码功能:统计一个字符串中所有字符在另一个字符串中出现的总次数。 技术要点:函数式编程。 可能的应用:垃圾邮件分类。在大部分垃圾邮件中,为了防止被分类为垃圾邮件,会在一些中间插入类似于【、】、*之类的字符来干扰分词。可以把这个特点作为一个判

    2024年02月02日
    浏览(49)
  • 统计Git项目各成员贡献量(代码行数、提交次数)

    在项目的文件夹中,右键,选择Git Bash Here 会弹出命令行框 使用下面的代码去统计

    2024年02月11日
    浏览(61)
  • Gitlab 实现仓库完全迁移,包括所有提交记录、分支、标签

    如果你和我一样,不喜欢命令行,就看其他方案。 选中要导出的项目,选择设置-expand-export project 刷新一下,直接下载 新建项目并导入 如果你是打杂的,没管理员权限,这步也不行。 在 gitlab 仓库页面,点击下载,注意使用 gz 格式!!! 去往你的新主体的 gitlab页面开始仓

    2024年03月28日
    浏览(49)
  • 【笔记】Git|将git仓库中所有的 commit 合成一个,清空所有 git 提交记录

    在对代码进行开源时,我们往往并不希望代码开发过程中的提交记录被其他人看到,因为提交的过程中往往会涵盖一些敏感信息。因此会存在 将仓库中所有 commit 合成一个 的需求。 直觉上,往往会用 rebase 和 squash 或 reset,不过我尝试了一下存在问题,会出现最后仍然剩两个

    2024年02月11日
    浏览(42)
  • python统计每个单词出现的次数

    编程要求 请按照函数的注释,补充程序中缺失部分语句,按要求实现如下程序功能:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬ word_frequency() 函数统计并以字典类型返回每个

    2024年02月11日
    浏览(46)
  • linux命令统计文件中某个字符串出现的次数

    可以使用grep命令统计文件中某个字符串出现的次数。语法: - grep -o:查找文件中匹配的字符串,并只输出字符串本身 - \\\'字符串\\\':需要统计的字符串,用单引号括起来 - 文件名:需要查找的文件的路径和文件名 - wc -l:统计行数,这里统计grep输出的行数,即字符串出现的次数例如,要统计

    2024年02月08日
    浏览(44)
  • chatgpt赋能python:Python怎么统计字符出现次数

    在Python编程中,统计字符出现次数是一项常见的任务。通过统计字符出现次数,我们可以更好地了解文本数据,并从中获取有用信息。Python提供了多种统计字符出现次数的方法和工具,本文将介绍常用的几种方法,并分析其优缺点。 Counter函数是Python内置的统计器函数,可以

    2024年02月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包