2017-02-23 13 views
0

У меня есть скрипт Python, который должен прочитать раздел очень большого текстового файла, начиная с строки N и заканчивая на N + X. Я не хочу использовать «open ('file')», потому что это запишет всю вещь в память, которая будет слишком долгой, и тратит слишком много памяти. Мой скрипт запускается на машине Unix, так что я в настоящее время используют нативные функции головы и хвоста, а именно:чтение первых N строк в файле без его открытия (Python)

section = subprocess.check_output('tail -n-N {filePath} | head -n X') 

, но чувствует, что должен быть умнее способ сделать это .. есть способ получить строки от N до N + X текстового файла в Python без открытия всего файла?

Спасибо!

+0

* «Я не хочу используйте «open (« файл »)», потому что это запишет всю вещь в память, которая будет слишком долгой, и потеряет слишком много памяти ». * Это не то, что делает' open'; используй это. – Ryan

ответ

2

языка Python islice() хорошо работает для этого:.

from itertools import islice 

N = 2 
X = 5 

with open('large_file.txt') as f_input: 
    for row in islice(f_input, N-1, N+X): 
     print row.strip() 

Это пропускает все начальные строки и просто возвращает строки, которые вы заинтересованы в

3

Ответ на ваш вопрос находится здесь: How to read large file, line by line in python

with open(...) as f: 
    for line in f: 
     <do something with line> 

с постановкой ручки открытия и закрытия файла, в том числе, если исключение возникает во внутреннем блоке. В строке for f обрабатывается файловый объект f как итеративный, который автоматически использует буферизованный IO и управление памятью, поэтому вам не нужно беспокоиться о больших файлах.

Смежные вопросы