web-dev-qa-db-ja.com

f.seek()およびf.tell()は、テキストファイルの各行を読み取ります

ファイルを開き、f.seek()f.tell()を使用して各行を読み取りたい:

test.txt:

abc
def
ghi
jkl

私のコードは:

f = open('test.txt', 'r')
last_pos = f.tell()  # get to know the current position in the file
last_pos = last_pos + 1
f.seek(last_pos)  # to change the current position in a file
text= f.readlines(last_pos)
print text

ファイル全体を読み取ります。

6
John

わかりました、これを使用できます:

f = open( ... )

f.seek(last_pos)

line = f.readline()  # no 's' at the end of `readline()`

last_pos = f.tell()

f.close()

覚えてね、 last_posはファイルの行番号ではなく、ファイルの先頭からのバイトオフセットです。インクリメント/デクリメントしても意味がありません。

18
lenik

F.tellとf.seekを使用しなければならない理由はありますか? Pythonのファイルオブジェクトは反復可能です。つまり、他のことをあまり気にすることなく、ファイルの行をネイティブにループできます。

with open('test.txt','r') as file:
    for line in file:
        #work with line
3
Sean Johnson

Isliceを使用して行をスキップすることは私にとって完璧に機能し、探しているものに近いように見えます(ファイル内の特定の行にジャンプします):

from itertools import islice

with open('test.txt','r') as f:
    f = islice(f, last_pos, None)
    for line in f:
        #work with line

ここで、last_posは、前回読み取りを停止した行です。 last_posの1行後に反復を開始します。

0
lotif

現在の位置を取得する方法ファイルの特定の行を変更する場合:

cp = 0 # current position

with open("my_file") as infile:
    while True:
        ret = next(infile)
        cp += ret.__len__()
        if ret == string_value:
            break
print(">> Current position: ", cp)
0
user6596781