この記事では、ファイル数、コード行数、コメント行数、空白行数など、Python を使用したコード統計ツールの設計に関する関連情報を主に紹介します。興味のある方は、Script House のエディターをフォローしてご覧ください
質問
ファイルの数、コードの行数を含む、プロジェクト内のコードの行数をカウントするプログラムを設計してください、コメント行の数、空白行の数。さまざまなパラメータを入力して、さまざまな言語のプロジェクトをカウントすることで、設計をより柔軟にしてください。たとえば、次のようになります。
分析
これは非常に単純そうに見える設計の問題ですが、ファイル内のコードの行数を正しく数えることができれば、問題を小さくすることができます。その中で、最も複雑なのは、複数行のコメントです。Python を例に挙げると、コメント コード行には次のような状況があります。シャープ記号2. 同じ行に複数行のコメント 状況
# 単一行のコメント
"""これは複数行のコメントです"""'''これも複数行のコメントです'''3. 複数行のコメント文字"""
これらの 3 行はすべてコメント文字です"""
私たちのアイデアは、複数行のコメントを識別するために追加の識別子 in_multi_comment を必要とすることです。現在の行が複数行コメント内にあるかどうか。デフォルトは False で、複数行コメントが開始されると、次の複数行コメント文字に到達すると True に設定されます。複数行コメントの開始記号と次の終了記号の間のコードは、コメント行に属している必要があります。
ファイルを正しく読み取る方法、ファイルを読み取る際の文字列処理の一般的な方法
簡易バージョン
# type用于指定文件类型
python counter.py --type python
# -*- coding: utf-8 -*-
"""
只能统计单行注释的py文件
"""
def parse(path):
comments = 0
blanks = 0
codes = 0
with open(path, encoding='utf-8') as f:
for line in f.readlines():
line = line.strip()
if line == "":
blanks += 1
elif line.startswith("#"):
comments += 1
else:
codes += 1
return {"comments": comments, "blanks": blanks, "codes": codes}
if __name__ == '__main__':
print(parse("xxx.py"))
# -*- coding: utf-8 -*- """もちろん、コマンドラインの解析や、指定されたパラメータに基づいて特定の言語のみを解析するなど、このプログラムを完成させるにはやるべきことがまだたくさんあります。
補足:
コード行数カウントツールのPython実装
プロジェクト内のコードの行数をカウントしたいことがよくありますが、より完全なカウント機能が必要な場合は、それほど単純ではないかもしれません。今日は Python を使用してコードライン統計ツールを実装する方法について説明しましょう。アイデア:
最初にすべてのファイルを取得し、次に各ファイルのコードの行数を数え、最後に行数を追加します。 実装された関数: 行数を数えます。各ファイル内の行数をカウントします。実行時間をカウントします。
サブディレクトリを含むファイルの行数を再帰的にカウントします。ファイル;空白行を除外します。
""" def parse(path): in_multi_comment = False # 多行注释符标识符号 comments = 0 blanks = 0 codes = 0 with open(path, encoding="utf-8") as f: for line in f.readlines(): line = line.strip() # 多行注释中的空行当做注释处理 if line == "" and not in_multi_comment: blanks += 1 # 注释有4种 # 1. # 井号开头的单行注释 # 2. 多行注释符在同一行的情况 # 3. 多行注释符之间的行 elif line.startswith("#") or \ (line.startswith('"""') and line.endswith('"""') and len(line)) > 3 or \ (line.startswith("'''") and line.endswith("'''") and len(line) > 3) or \ (in_multi_comment and not (line.startswith('"""') or line.startswith("'''"))): comments += 1 # 4. 多行注释符的开始行和结束行 elif line.startswith('"""') or line.startswith("'''"): in_multi_comment = not in_multi_comment comments += 1 else: codes += 1 return {"comments": comments, "blanks": blanks, "codes": codes} if __name__ == '__main__': print(parse("xxx.py"))
結果:
[root@pythontab script]# python countCodeLine.py /root/script/test/gametest.php---- 16
/root/script/smtp.php ---- 284/root/script/gametest.php---- 16
/root/script/countCodeLine.py---- 33/root/script/sendmail .php---- 17/root /script/test/gametest.php---- 16 総行数: 382
完了! コスト時間: 0.00 秒[root@pythontab script]#
のみphp と python ファイルをカウントできるので、非常に便利です。 関連する推奨事項: Python 設計パターン プログラミングにおけるビジターおよびオブザーバー パターンの例の紹介
以上がPython を使用してコード統計ツールを設計するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。