У меня есть таблица ASCII в файле, из которого я хочу прочитать определенный набор строк (например, строки 4003-4005). Проблема в том, что этот файл может быть очень длинным (например, от 100 тысяч до миллионов строк), и я хотел бы сделать это как можно быстрее.
Плохое решение: прочитайте весь файл и перейдите к этим строкам,
f = open('filename')
lines = f.readlines()[4003:4005]
Лучшее решение: enumerate
по каждой строке, чтобы оно не было в памяти (a la qaru.site/info/48967/...)
f = open('filename')
lines = []
for i, line in enumerate(f):
if i >= 4003 and i <= 4005: lines.append(line)
if i > 4005: break # @Wooble
Лучшее решение?
Но это все равно требует перехода через каждую строку. Есть ли лучший способ (с точки зрения скорости/эффективности) доступа к определенной строке? Должен ли я использовать linecache, хотя я могу получить доступ к файлу только один раз (обычно)?
Вместо этого использовать двоичный файл, и в этом случае было бы проще пропустить опцию, но я бы предпочел избежать этого.