Страницы

Поиск по вопросам

суббота, 8 февраля 2020 г.

Как считать строки из файла начав с определенного номера строки?

#python


Как осуществить последовательное чтение строк из файла, начав с определенного номера
строки?
    


Ответы

Ответ 1



Файл является итератором над строками в Питоне. Можно использовать itertools.islice(), чтобы заданный диапазон строк получить: lines = islice(file, n, None) Для улучшения производительности для больших файлов можно попробовать использовать mmap и искать индекс вхождения b'\n' (не тестировано): #!/usr/bin/env python3 import contextlib import os import mmap @contextlib.contextmanager def tail_kth_mmap(filename, k=0, newline=os.linesep.encode()): """Return mmap positioned at the k-th line.""" with open(filename, 'rb') as file, \ mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s: i = -1 for _ in range(k): i = s.find(newline, i+1) if i == -1: # file is too small break if i != -1: s.seek(min(i + len(newline), s.size())) elif k > 0: s.seek(0, 2) # EOF yield s Пример, чтобы напечатать data.txt, начиная с n-ой строки: with tail_kth_mmap('data.txt', k=n) as s: shutil.copyfileobj(s, sys.stdout.buffer)

Ответ 2



Считать строки из файла с определённого номера строки можно с помощью следующего кода fileName = 'data.txt' n = 9 # Нумерация строк в файле будет с 0 f = open(fileName, 'r') for i, line in enumerate(f): line = line.replace("\n", "") if i >= n: print(line)

Ответ 3



Вот еще один пример, как по мне очень наглядный и простой lines=[25, 29] # диапазон строк i=0 # индекс f=open('/path/file.txt') for line in f: if i in lines: i+=1

Ответ 4



Пример из предыдущего ответа не работал, исправил, проверил - работает: file_name = 'filename' with open(filename, 'r') as text_file: lines = [0, 1, 2] # диапазон строк i = 0 for line in text_file: if i in lines: i += 1 print('line: ', line) else: i +=1

Комментариев нет:

Отправить комментарий