実際にファイル全体をメモリにロードせずにcsvファイルの行数を見つける方法はありますか(Pythonで)?
特別に最適化された機能があると思います。私が今想像できるのは、それを1行ずつ読んで行を数えることだけですが、実際のコンテンツではなく行数だけが必要なので、考えられるすべての意味を殺してしまいます。
ファイルは行単位で反復可能であるため、ファイル全体をメモリにロードする必要はありません。
with open(path) as fp:
count = 0
for _ in fp:
count += 1
または、もう少し慣用的に:
with open(path) as fp:
for (count, _) in enumerate(fp, 1):
pass
はい、ファイル内の行数を知る前に、メモリ内のファイル全体を読み取る必要があります。ファイルが長い長い文字列 Aaaaabbbbbbbcccccccc\ndddddd\neeeeee\n であると考えて、文字列に含まれる \n 文字の数を見つけるために必要な「行」の数を知る必要があります。
おおよその数が必要な場合は、数行 (〜 20) を読み取り、1 行あたりの文字数を確認してから、ファイルのサイズ (ファイル記述子に格納されている) から推定値を取得します。