Share This
Связаться со мной
Крути в низ
Categories
//Как прочесть определенную строку файла при помощи Python

Как прочесть определенную строку файла при помощи Python

05.01.2024Category : Python

Предположим, у вас есть довольно большой файл (размер исчисляется в гигабайтах). Вы хотите прочесть строку № 120. При этом не хотелось бы загружать в память содержимое файла целиком. То есть, наша задача — прочесть определенную строку текстового файла. Приступим!

Содержание

  • Чтение конкретных строк файла при помощи enumerate()
  • Как прочесть определенную строку файла при помощи модуля linecache
  • Чтение диапазона строк при помощи readlines()
  • Генератор для считывания определенной строки файла
  • Как прочесть определенную строку файла, перебирая файловый объект в цикле for

Чтение конкретных строк файла при помощи enumerate()

Чтобы прочесть определенную строку текстового файла, пройдите следующие шаги:

  1. Откройте файл в режиме чтения. Для открытия файла передайте в функцию open() путь к файлу и режим доступа (для чтения — ‘r’). Режим доступа определяет, что можно будет делать с открытым файлом (читать или записывать в него).
  2. Создайте список для хранения номеров нужных строк.
  3. Создайте список для хранения самих строк. Прочитав строки под номерами из первого списка, мы сохраним результат во второй список.
  4. Используйте цикл for с функцией enumerate(), чтобы получить строку и ее номер. Передайте указатель на файл, возвращенный функцией open(), в enumerate(). Эта функция добавляет счетчик к итерируемому объекту и возвращает объект enumerate. Мы можем использовать этот объект в цикле for для доступа к номерам строк. Примечание: enumerate(file_pointer) не загружает в память файл целиком, так что это эффективное решение.
  5. Прочтите стоку файла под нужным номером. Для проверки номера строки используйте условие if в каждой итерации. При нахождении совпадения сохраните строку в список.

Пример использования enumerate()

У нас есть текстовый файл read_demo.txt со следующим содержимым:

First line Second line Third line Fourth line Fifth line Sixth line Seventh line Eighth line

Давайте прочтем строки 5 и 8.

with open(r"E:demosfilesread_demo.txt", 'r') as fp:     # lines to read     line_numbers = [4, 7]     # To store lines     lines = []     for i, line in enumerate(fp):         # read line 4 and 7         if i in line_numbers:             lines.append(line.strip())         elif i > 7:             # don't read after line 7 to save time             break print(lines)  # Вывод: # ['Fifth line', 'Eighth Line']

Как прочесть определенную строку файла при помощи модуля linecache

Использование linecache — еще один оптимизированный по части производительности способ перепрыгнуть к определенной строке в текстовом файле. Если у вас большой файл, linecache будет хорошим выбором.

Чтобы прочесть определенную строку файла, используйте метод linecache.getline(). Он принимает в качестве аргументов путь к файлу и номер строки.

Примеры использования модуля linecache

Прочтем строку № 5:

import linecache  # read fifth line line = linecache.getline(r"E:demosfilesread_demo.txt", 5) print(line)  # Вывод: # Fifth line

Если хотите прочесть больше одной строки, обратите внимание на следующий пример:

import linecache  line_numbers = [2, 4] lines = [] for i in line_numbers:     x = linecache.getline(r"E:demosfilesread_demo.txt", i).strip()     lines.append(x) print(lines)

Чтение диапазона строк при помощи readlines()

Если у вас маленький файл и вы не озабочены производительностью, вам лучше всего подойдет метод readlines().

Вообще Python очень быстро читает файлы, размер которых не превышает несколько Мб.

Метод readlines() считывает все строки файла и сохраняет их в списке. Далее можно использовать индексацию списка для доступа к кокретной строке (или строкам).

Это самый простой способ прочесть определенную строку файла при помощи Python. Мы считываем весь файл целиком и затем выбираем нужные части.

Пример использования readlines()

Давайте прочтем строки с 3 по 5. Не забывайте, что индексация списка начинается с нуля.

with open(r"E:demosfilesread_demo.txt", 'r') as fp:     # read line number 3 to 5     # index starts from 0     x = fp.readlines()[2:5]     print(x)

А теперь прочтем строку № 8.

with open(r"E:demosfilesread_demo.txt", 'r') as fp:     # read line 8     x = fp.readlines()[7]     print(x)

Вы также можете использовать метод readline(), чтобы читать файл построчно и остановиться на определенной строке. Используя такой подход, не придется считывать весь файл.

lines = [2, 5] result = [] i = 0  with open("read_demo.txt", "r+") as fp:     # access each line     while True:         line = fp.readline()         # check line number         if i in lines:             result.append(line.strip())         # line number greater than needed exit the loop         # lines[-1] give last item from list         if i > lines[-1]:             break;         i = i + 1 print(result)

Генератор для считывания определенной строки файла

Генераторное выражение — быстрое и компактное решение для чтения строк файла по номерам.

Если вам нужно извлечь из файла очень много строк, стоит использовать генератор.

Это решение принимает указатель файла и номера строк, которые нужно прочесть. Возвращается объект генератора, который можно проитерировать в цикле для получения каждой строки.

# read by line numbers def get_lines(fp, line_numbers):     return (x for i, x in enumerate(fp) if i in line_numbers)  with open(r"E:demosfilesread_demo.txt", 'r') as fp:     # read line 4 and 7     lines = get_lines(fp, [3, 6])     # print each line     for line in lines:         print(line.strip())  # Вывод: # Fourth line # Seventh Line

Как прочесть определенную строку файла, перебирая файловый объект в цикле for

Если у вас маленький файл, а производительность не в приоритете, используйте цикл. Можно перебрать в цикле for все строки файлового объекта, а добавленное условие поможет отсеять нужные. Обратите внимание, что при таком подходе в память загружается весь файл.

Пример перебора файлового объекта в цикле

lines = [2, 5] result = [] i = 0  with open("read_demo.txt", "r+") as fp:     # access each line     for line in fp:         # check line number         if i in lines:             result.append(line.strip())         i = i + 1 print(result)  # Вывод: # ['Third line', 'Sixth Line']

Заключение

Если файл маленький, используйте readlines() или readline() и цикл для перебора строк в файловом объекте.

В качестве более чистого решения можно предложить linecache. Он хорошо подходит для ситуаций, когда нужно неоднократно считывать одни и те же строки или читать разные строки из нескольких файлов.

Для больших файлов используйте enumerate(), поскольку при таком подходе не нужно загружать в память весь файл.

Перевод статьи «Read Specific Lines From a File in Python».

  • 0 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close