Pythonで「行数をカウントする」方法には、いくつかの目的と手段があります。
たとえば、以下のようなケースによって適切な方法が異なります。
目的別:行数カウントの代表的なケース
目的 | 主な方法 | 解説 |
---|---|---|
ファイルの行数を知りたい | open() でファイルを開き、len(list(f)) や sum(1 for _ in f) を使う | 実ファイルの中に何行あるかを知る |
Pythonスクリプトのコード行数を測りたい(コメント除く) | tokenize モジュールを使う | 実際のコード行だけをカウントする場合に有効 |
Jupyter Notebookセルの行数を知りたい | len(cell.split('\n')) | セル内のコード行をカウント |
Pythonの関数やクラスの行数を知りたい | inspect.getsourcelines() を使う | 関数の規模や複雑性を測定可能 |
ファイルの行数を数える(全行)
サンプルファイルの準備
まず、行数を数える対象となるファイル(ここでは "sample.py"
)をあらかじめ作成しておきましょう。
ファイルが存在しない場合、エラーになりますのでご注意ください。
# sample.py
def hello():
print("Hello, world!")
hello()
# ファイルの全行を数える基本的な方法
with open("sample.py", "r", encoding="utf-8") as f:
line_count = sum(1 for _ in f)
print(f"行数は {line_count} 行です。")
応用:空行を除きたい場合
with open("sample.py", "r", encoding="utf-8") as f:
line_count = sum(1 for line in f if line.strip()) # 空行はカウントしない
print(f"空行を除いた行数: {line_count}")
コメントや空白を除いた実コード行数(SLOC)を数える
Pythonでは「コメント行」「空白行」を除外して、SLOC(Source Lines of Code)を数えたい場合があります。
import tokenize
def count_code_lines(file_path):
with open(file_path, 'rb') as f:
tokens = tokenize.tokenize(f.readline)
return len([
token for token in tokens
if token.type == tokenize.NEWLINE or token.type == tokenize.NL
])
print(count_code_lines("sample.py"))
tokenize
は Pythonの構文構造に近い行数を抽出できるが、実際のファイル構造によって結果が多少変わる点に注意。
Jupyter Notebookのコードセルの行数をカウントする方法
Jupyter Notebookのセル内で自分の書いたコードの行数を知るには以下のようにします。
cell_code = '''
def hello():
print("Hello, world!")
return True
'''
line_count = len(cell_code.strip().split('\n'))
print(f"このセルの行数は {line_count} 行です")
セルに書いたコードをそのまま文字列として渡して、
split('\n')
で改行を分割すれば簡易的に数えられます。
特定の関数やクラスの行数を数える(動的)
import inspect
def sample_function():
print("Hello")
x = 1 + 2
return x
lines, start_line = inspect.getsourcelines(sample_function)
print(f"関数の行数は {len(lines)} 行です")
これは、Pythonオブジェクトのソースコードを取得する機能で、クラスや関数のサイズを計測するのに便利です。
補足:プロジェクト全体のPythonファイル行数をカウントしたい場合
複数のPythonファイルを含むディレクトリ全体で行数を数えたいとき
import os
def count_lines_in_project(path):
total_lines = 0
for root, _, files in os.walk(path):
for file in files:
if file.endswith(".py"):
with open(os.path.join(root, file), 'r', encoding='utf-8') as f:
total_lines += sum(1 for _ in f)
return total_lines
print(f"プロジェクト全体の行数: {count_lines_in_project('./my_project')} 行")
まとめ

目的 | 使用方法 | 備考 |
---|---|---|
単純な行数 | sum(1 for _ in f) | 最も高速・軽量 |
コメント除去 | tokenize モジュール | 精度高くコード行を測定 |
関数の行数 | inspect.getsourcelines() | 動的に関数・クラスを分析 |
ディレクトリ全体 | os.walk() で再帰 | プロジェクト解析向け |
注意点
ローカルPCの環境(OSやPythonバージョン、ファイルの文字コード設定など)によって動作や結果が若干異なる場合があります。
特に大規模なプロジェクトや多言語混在のファイルを扱う場合は注意が必要です。
また、記事中で紹介した tokenize
モジュールや inspect
モジュールは標準ライブラリに含まれていますが、プロジェクト全体を可視化したり、より高度なレポートを作成する際には、pyler
や win10toast
などの外部ライブラリを活用するケースもあります。
その場合は、必要なライブラリをローカルPCにインストールしてから実行してください。
例
pip install pyler win10toast
ライブラリのインストールと実行環境の整備は、各自のPCに合わせて適宜行うようお願いいたします。
以上、Pythonの行数のカウント方法についてでした。
最後までお読みいただき、ありがとうございました。