Python 3で大きなファイルの行数を安価に取得する方法

PYTHON3 チュートリアル

大きなファイルの行数を効率的に取得する方法

Pythonを使用して大きなファイルの行数を効率的に数える方法をいくつか紹介します。これらの方法は、ファイルを一度に全て読み込むことなく、メモリの使用を抑えつつ、行数をカウントします。

方法1: バッファリングを活用した読み込み

この方法では、open() 関数を使い、ファイルを行ごとに読み込みます。これにより、大きなファイルでもメモリの消費を抑えることができます。

def count_lines(filename):
    with open(filename, 'r', encoding='utf-8') as file:
        line_count = 0
        for line in file:
            line_count += 1
    return line_count

# ファイル名を指定して行数を取得
filename = 'your_large_file.txt'
print(f'行数: {count_lines(filename)}')

方法2: Unixコマンドを使用

Unix系のシステムでは、wc コマンドを利用してファイルの行数を簡単に取得することが可能です。Pythonからは subprocess モジュールを使ってこのコマンドを実行します。

import subprocess

def count_lines_unix(filename):
    result = subprocess.run(['wc', '-l', filename], text=True, capture_output=True)
    line_count = int(result.stdout.split()[0])
    return line_count

# ファイル名を指定して行数を取得
filename = 'your_large_file.txt'
print(f'行数: {count_lines_unix(filename)}')

方法3: メモリマッピングを使用

大きなファイルを扱う際には、mmap モジュールを使用してメモリマッピングを行うことが効果的です。これにより、ファイルの特定の部分だけをメモリに読み込み、全体の読み込みを省略できます。

import mmap

def count_lines_mmap(filename):
    with open(filename, 'r', encoding='utf-8') as file:
        with mmap.mmap(file.fileno(), length=0, access=mmap.ACCESS_READ) as m:
            line_count = 0
            while m.readline():
                line_count += 1
    return line_count

# ファイル名を指定して行数を取得
filename = 'your_large_file.txt'
print(f'行数: {count_lines_mmap(filename)}')

以上の方法を用いることで、大きなファイルの行数を効率的にかつ正確に取得することができます。使用する方法は、環境やニーズに応じて選択してください。

購読
通知
0 Comments
Inline Feedbacks
View all comments