Okuma satırlarındaki sorun, tüm dosyayı belleğe okuyup linecache'nin aynı şeyi yapmasıdır.
Bir seferde bir satır okuyarak ve en kısa sürede func.endline
ulaşırken devreyi keserek biraz zaman kazandırabilir Ama buldum iyi yöntem İşte sonuçlarını itertools.islice
kullanmaktır
İşte
--- 1.43700003624 seconds --- f_readlines
--- 1.00099992752 seconds --- f_enumerate
--- 1.1400001049 seconds --- f_linecache
--- 0.0 seconds --- f_itertools_islice
ben
import time
import linecache
import itertools
def f_readlines(filename, start_line, endline):
with open(filename) as f:
f.readlines()[5000:10000]
def f_enumerate(filename, start_line, endline):
result = []
with open(filename) as f:
for i, line in enumerate(f):
if i in range(start_line, endline):
result.append(line)
if i > endline:
break
def f_linecache(filename, start_line, endline):
result = []
for n in range(start_line, endline):
result.append(linecache.getline(filename, n))
def f_itertools_islice(filename, start_line, endline):
result = []
with open(filename) as f:
resultt = itertools.islice(f, start_line, endline)
for i in resultt:
result.append(i)
def runtest(func_to_test):
filename = "testlongfile.txt"
start_line = 5000
endline = 10000
start_time = time.time()
func_to_test(filename, start_line, endline)
print("--- %s seconds --- %s" % ((time.time() - start_time),func_to_test.__name__))
runtest(f_readlines)
runtest(f_enumerate)
runtest(f_linecache)
runtest(f_itertools_islice)
kullanılan komut bulabilirsiniz: Ben ~ 9701k hatlarının bir 130MB dosya üzerinde yapmış bazı testler
Neden bu kadar zaman alıyor? Dosya çok mu büyük? Öyleyse ne kadar büyük? –
[linecache] (https://docs.python.org/2/library/linecache.html) modülünü veya "itertools.islice" dosyasını deneyebilir ve ayrıca çok zaman alıcı olup olmadıklarını görebilirsiniz. Burada daha fazla bilgi görmek için: http://stackoverflow.com/questions/2081836/reading-specific-lines-only-python –
hayır, sanırım sorun şu ki tekrar açıp kapatacağım ve tekrar kapatıyorum, abec linecache can Aynı anda çok çizgili çizgilere sahip olsaydı ilginç olurdu. –