2016-04-13 4 views
0

В настоящее время я использую C++-скрипт с оболочкой Python для управления строчным текстовым файлом (15 ГБ). Фактически, что он делает, он читает строку из input.txt, обрабатывает ее, выводит результат на output.txt. Я использую цикл straigtforward здесь (вх быть открыт как input.txt, из открываемой в output.txt):Как эффективно пропустить первые n строк в файле с помощью python?

for line in inp: 
    result = operate(line) 
    out.write(result) 

Однако из-за проблем в C++ Script, он имеет некоторую интенсивность отказов, которая приводит к тому чтобы закрыть после десяти миллионов итераций. Это оставляет мне выходной файл, сделанный с использованием только 10% ввода.

Поскольку у меня нет средств для исправления исходного сценария, я думал о том, чтобы просто перезапустить его там, где он остановился. Я считал линии output.txt, сделал еще называют output2.txt, и начал следующий код:

k = 0 
for line in inp: 
    if k < 12123253: 
     k + = 1 
    else: 
     result = operate(line) 
     out2.write(result) 
     k + = 1 

Однако, по сравнению с тем, когда я подсчета линий, которые заканчивались менее чем за минуту, этот метод занимает много времени часов, чтобы добраться до назначенной линии.

Почему этот метод неэффективен? Есть ли более быстрый? Я на ПК с высокой вычислительной способностью (оперативная память 72 ГБ, хорошие процессоры) и с использованием python 2.7.

+0

Я думаю, что скажите (чтобы записать, где вы были) и ищите (чтобы вернуться к этому моменту в вашем следующем прогоне), вероятно, могли бы помочь вам. http://stackoverflow.com/questions/3299213/python-how-can-i-open-a-file-and-specify-the-offset-in-bytes –

ответ

5

Я предлагаю вам использовать itertools

with open(inp) as f: 
    result = itertools.islice(f, start_line, None) 
    for i in result: 
     #do something with this line 
+0

Это все равно прочитает весь файл до точки интерес. –

1

вы можете использовать file.seek и file.tell. Ниже приведен образец (псевдо) кода:

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