0

Pythonではfile.readlines()で全行取得するので、ファイルサイズが大きい(数Mb)と無駄です。ファイルの一部をページとして取得する効率的な方法はありますか? 通常、部分テキストは webapp のページとして表示されます。テキストをさらに装飾することを検討してください。

4

2 に答える 2

1

ジェネレーターを使用して、非常に Pythonic で効率的な方法でこれを行うことができます。

def getPage(fileName, numberOfLinesInAPage):

    f = open(fileName)

    lines = (line.strip() for line in f)
    pageBuffer = []
    for lineNum, eachLine in enumerate(lines,1):
        pageBuffer.append(eachLine)
        if lineNum % numberOfLinesInAPage == 0:
            yield pageBuffer
            pageBuffer = []
    if pageBuffer:
        yield pageBuffer    
    f.close()   

for i in getPage('test.txt',100):
    print i
于 2012-08-19T19:48:23.533 に答える
0

現在、私はバイトサイズによる大まかな方法​​を考えています:

import os
def getpage(fname, pageindex, pagesize=100, ahead=20):
    """read page roughly by byte size"""
    size = os.path.getsize(fname)
    pagenum = size/pagesize
    f=open(fname,'r')
    pos=pageindex * pagesize
    #ahead some line
    pos -= ahead
    if pos <0: 
        pos = 0
    f.seek(pos)
    f.readline()
    txt = f.read(pagesize)
    txt += f.readline()    
    return txt

固定された行ではなく、ゆるいテキストもあればタイトなテキストもあります。しかし、適度なページサイズであれば、ユーザーの視点では問題ありません。

于 2012-08-19T17:16:34.890 に答える