1

テキストファイルから特定の行を読んでいます。これが私のコードです:

file.seek(0)
for j, ln in enumerate(file):
   if j == line_number
      line = ln   # i'm getting the line
      break

line_numberが毎ターンランダムである「ループ」でこのコードを使用すると、長い時間がかかりました。linecache.getline()も試しましたが、毎ターンlinecache.clearcache()を呼び出す必要があるため、良くありません。

そのためのより速い解決策はありますか?メモリは関係ありません。

4

4 に答える 4

3

メモリが本当に重要でない場合:

lines = file.readlines()

line = lines[line_number]

ファイルを一度読み込んでメモリに保存し、そこからアクセスします。

編集:メモリが重要な場所:

from itertools import dropwhile

line = next(dropwhile(lambda x: x[0]==line_number, enumerate(file)))[1]

itertools.dropwhile()必要な行に到達するまで、行を無視するために使用できます。

于 2012-05-03T21:13:05.813 に答える
1

ループの上でこれを使用します:

with open('in.txt') as f:
 lines=[ln for ln in f]

ここで、ループ内の任意の行番号にアクセスします。

lines[line_number]
于 2012-05-03T21:18:55.387 に答える
1
def getLine(fileObj, lineNo):
    [fileObj.readline() for i in xrange(lineNo - 1)]
    return fileObj.readline()
于 2012-05-03T21:29:20.647 に答える
0

他の方法

import linecache
linecache.getline('myfile', line_number)
于 2013-01-25T08:49:17.980 に答える