1

我想知道我的存储库中的文件在代码行方面有多大,以查看存储库的“健康状况”。

为了回答这个问题,我想查看特定范围(可以是 1)的文件数量的分布(可视化与否):

#lines of code   #files   
 1-10             1
11-20             23
etc...

(这个的直方图会很好)

是否有快速的原因,例如使用cloc或任何其他(命令行)工具?

4

1 回答 1

0

cloc和 Pandas的组合可以处理这个问题。首先,使用和开关将行数捕获cloc到 csv 文件中,例如--by-file--csv

cloc --by-file --csv --out data.csv curl-7.80.0.tar.bz2

然后使用下面的 Python 程序按文件夹聚合和分箱数据:

./aggregate_by_folder.py data.csv

的代码aggregate_by_folder.py

#!/usr/bin/env python
import sys
import os.path
import pandas as pd
def add_folder(df):
    """
    Return a Pandas dataframe with an additional 'folder' column
    containing each file's parent directory
    """
    header = 'github.com/AlDanial/cloc'
    df = df.drop(df.columns[df.columns.str.contains(header)], axis=1)
    df['folder'] = df['filename'].dropna().apply(os.path.dirname)
    return df

def bin_by_folder(df):
    bins = list(range(0,1000,50))
    return df.groupby('folder')['code'].value_counts(bins=bins).sort_index()

def file_count_by_folder(df):
    df_files = pd.pivot_table(df, index=['folder'], aggfunc='count')
    file_counts = df_files.rename(columns={'blank':'file count'})
    return file_counts[['file count']]

def main():
    if len(sys.argv) != 2:
        print(f"Usage:  {sys.argv[0]} data.csv")
        print("     where the .csv file is created with")
        print("       cloc --by-file --csv --out data.csv my_code_base")
        raise SystemExit
    pd.set_option('display.max_rows', None)
    pd.set_option('display.width', None)
    pd.set_option('display.max_colwidth', -1)
    df = add_folder(pd.read_csv(sys.argv[1]))
    print(pd.pivot_table(df, index=['folder'], aggfunc='sum'))
    print('-' * 50)
    print(file_count_by_folder(df))
    print('-' * 50)
    print(bin_by_folder(df))

if __name__ == "__main__": main()
于 2021-12-02T05:48:37.277 回答