4

重複の可能性:
Python で安価に行数を取得するには?

良い一日。以下に、行ごとのファイル読み取りとカウンター反復を実装するコードをいくつか示します。

def __set_quantity_filled_lines_in_file(self):
    count = 0
    with open(self.filename, 'r') as f:
        for line in f:
             count += 1
    return count

私の質問は、行ごとの反復なしで現在のファイル内のテキスト データの行数を判断する方法はありますか?

ありがとう!

4

5 に答える 5

5

一般に、ファイル内のすべての文字を読み取り、改行文字をカウントするよりも優れた方法はありません。

ファイルの内部構造を詳しく知っていれば可能かもしれません。たとえば、ファイルの長さが 1024kB で、各行の長さが 1kB の場合、ファイルには 1024 行あると推測できます。

于 2012-05-12T08:53:15.497 に答える
3

Pythonにその機能があるかどうかはわかりませんが、非常に疑わしいですが、基本的にファイル全体を読み取る必要があります。改行は \n 文字 (実際にはシステムに依存) で示されるため、ファイル全体を調べずに、ファイル内に改行がいくつ存在するかを知る方法はありません。

于 2012-05-12T08:30:24.413 に答える
1

readlines()ファイルメソッドを使用できますが、これがおそらく最も簡単です。

別の方法にしたい場合は、read()メンバー関数を使用してファイル全体を取得し、 collections.Counterクラスを使用してCR、LF、CRLRLFCR文字の組み合わせをカウントできます。
ただし、回線を終了するさまざまな方法に対処する必要があります。
何かのようなもの:

import collections
f=open("myfile","rb")
d=f.read()
f.close()
c=collections.Counter(d)
lines1=c['\r\n']
lines2=c['\n\r']
lines3=c['\r']-lines1-lines2
lines4=c['\n']-lines1-lines2
nlines=lines3+lines4
于 2012-05-12T08:48:01.273 に答える
1

いいえ、そのような情報は、ファイルの内容全体を反復処理する (またはファイル全体をメモリに読み込む) ことによってのみ取得できます。

ファイルの内容をループしなくても、呼び出す関数はループします。たとえば、要素の数をカウントするためだけに、ファイル全体len(f.readlines())をリストに読み込みます。ファイルの内容をまったく保存する必要がないため、これは非常に非効率的です。

于 2012-05-12T08:27:56.757 に答える
0

これで答えが得られますが、ファイル全体を読み取り、行をリストに保存します

    len(f.readlines())
于 2012-05-12T08:35:05.567 に答える