日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

使用PYTHON统计项目代码行数

發(fā)布時間:2024/9/5 python 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用PYTHON统计项目代码行数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

  • 一 使用PYTHON統(tǒng)計項目代碼行數(shù)
  • 二 應(yīng)用實例

注:原創(chuàng)不易,轉(zhuǎn)載請務(wù)必注明原作者和出處,感謝支持!

一 使用PYTHON統(tǒng)計項目代碼行數(shù)

遇到一個非常小的需求:統(tǒng)計一個項目里頭的各類源代碼共有多少行。像這種小需求,一個簡單的shell腳本就能夠完成的。但是我不會shell ヾ(。 ̄□ ̄)ツ゜゜゜。于是求助python,經(jīng)過一段時間后,寫了一個簡單的Python腳本如下。

# code_analyst.py#!/usr/bin/env python3 # -*- coding: utf-8 -*-import os import sys import prettytable as pt# 后綴集合 CPP_SUFFIX_SET = {'.h', '.hpp', '.hxx', '.c', '.cpp', '.cc', '.cxx'} PYTHON_SUFFIX_SET = {'.py'} JAVA_SUFFIX_SET = {'.java'}# 全局變量 cpp_lines = 0 python_lines = 0 java_lines = 0 total_lines = 0def list_files(path):'''遍歷工程路徑path,如果遇到文件則統(tǒng)計其行數(shù),如果遇到目錄則進行遞歸'''filenames = os.listdir(path)for f in filenames:fpath = os.path.join(path, f)if (os.path.isfile(fpath)):count_lines(fpath)if (os.path.isdir(fpath)):list_files(fpath)def count_lines(fpath):'''對于文件fpath,計算它的行數(shù),然后根據(jù)其后綴將它的行數(shù)加到相應(yīng)的全局變量當中'''global CPP_SUFFIX_SET, PYTHON_SUFFIX_SET, JAVA_SUFFIX_SETglobal cpp_lines, python_lines, java_lines, total_lines# 統(tǒng)計行數(shù)with open(fpath, 'rb') as f:cnt = 0last_data = '\n'while True:data = f.read(0x400000)if not data:breakcnt += data.count(b'\n')last_data = dataif last_data[-1:] != b'\n':cnt += 1# 只統(tǒng)計C/C++,Python和Java這三類代碼suffix = os.path.splitext(fpath)[-1]if suffix in CPP_SUFFIX_SET:cpp_lines += cntelif suffix in PYTHON_SUFFIX_SET:python_lines += cntelif suffix in JAVA_SUFFIX_SET:java_lines += cntelse:passdef print_result():'''本函數(shù)依賴庫prettytable,請使用sudo pip3 install prettytable進行安裝'''tb = pt.PrettyTable()tb.field_names = ['CPP', 'PYTHON', 'JAVA', 'TOTAL']tb.add_row([cpp_lines, python_lines, java_lines, total_lines])print(tb)if __name__ == '__main__':if (len(sys.argv) != 2):print("Usage : python3 code_analyst.py project_path")else:project_path = sys.argv[1]list_files(project_path)total_lines = cpp_lines + python_lines + java_linesprint_result()

簡單解釋一下代碼。首先在命令行運行該腳本并將項目目錄的路徑作為命令行參數(shù)傳入。比如,在當前目錄下面有一個目錄src,你可以使用以下命令對該項目的代碼行數(shù)進行統(tǒng)計。

python3 code_analyst.py `pwd`/src

然后,將項目路徑project_path傳入list_files()當中,list_files()負責遞歸地搜索目錄下的每一個子文件或者子文件夾。如果找到的是文件,則將文件名fpath傳給count_lines()當中。count_lines()只統(tǒng)計文件后綴名在預(yù)定義的文件后綴集合當中的文件的行數(shù)。在統(tǒng)計完成之后,調(diào)用print_result()把結(jié)果打印出來。

注意:print_result()依賴軟件包prettytable,請使用下面的命令進行安裝。

sudo pip3 install prettytable

二 應(yīng)用實例

src目錄的統(tǒng)計結(jié)果。

lzh@lzh-VBox:~$ python3 code_analyst.py ./Temp/src/ +-----+--------+------+-------+ | CPP | PYTHON | JAVA | TOTAL | +-----+--------+------+-------+ | 21 | 0 | 0 | 21 | +-----+--------+------+-------+ lzh@lzh-VBox:~$

開源SLAM系統(tǒng)VINS-Mono的統(tǒng)計結(jié)果。

lzh@lzh-VBox:~$ python3 code_analyst.py ./VINS-Mono/ +-------+--------+------+-------+ | CPP | PYTHON | JAVA | TOTAL | +-------+--------+------+-------+ | 27695 | 0 | 0 | 27695 | +-------+--------+------+-------+ lzh@lzh-VBox:~$

高翔博士《視覺SLAM十四講》配套代碼庫的統(tǒng)計結(jié)果。

lzh@lzh-VBox:~$ python3 code_analyst.py ./slambook-master/ +-------+--------+------+-------+ | CPP | PYTHON | JAVA | TOTAL | +-------+--------+------+-------+ | 14240 | 127 | 0 | 14367 | +-------+--------+------+-------+ lzh@lzh-VBox:~$

上述代碼只是一段玩具代碼,非常脆弱,只能達到基本能用的程度。你輸入個錯誤的項目路徑,程序分分鐘奔潰。

轉(zhuǎn)載于:https://www.cnblogs.com/laizhenghong2012/p/11348004.html

總結(jié)

以上是生活随笔為你收集整理的使用PYTHON统计项目代码行数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。