Чтение с файла с определённой строки
У меня есть текстовый файл и мне нужно считать всю информацию, которая расположена после 25-й строки.
Как это сделать? Пожалуйста, помогите!
Если небольшой файл, можно список строк получить и отбросить первые 25:
Если файл большой, то чтобы не читать его весь сразу, можно воспользоваться тем что file является итератором на строками, разделёнными «\n»:
в этом случае lines не список, а итератор возвращающий строки из файла при его обходе, начиная с 26-ой строки, где file = open(filename) .
Например, можно сделать так:
если исключительно считать, а не вывести, то вместо последней строки x=line
Чтение текстового файла в Python
В следующей программе в Python мы откроем файл sample.txt в режиме чтения. Мы прочитаем все содержимое текстового файла и выведем текст на консоль.
Вы можете указать полный или абсолютный путь к методу open() или указать относительный путь, если базовый путь присутствует в переменной среды PATH.
Пример 2: только чтение некоторых символов
Если вам нужно прочитать только определенное количество символов, скажем, количество символов N, присутствующее в начале файла, передайте N (число) в качестве аргумента метода read().
В следующей программе мы прочитаем первые 20 символов файла.
Функция read (20) вернула первые 20 символов из текстового файла.
Пример 3: чтение в текстовом режиме
Режимы чтения, записи и выполнения зависят от разрешений. В зависимости от характера контента существуют текстовые и двоичные файлы.
В следующем примере мы явно откроем файл в текстовом режиме, указав «t» вместе с режимом «r» для чтения.
Пример 4: построчное чтение
Чтобы прочитать текст построчно из файла, используйте функцию File.readline(), которая возвращает текущую строку и обновляет свой указатель на следующую строку. Итак, когда вы вызываете функцию readline() в следующий раз – возвращается следующая строка.
Помните, что readline() возвращает строку вместе с символом новой строки в конце строки, за исключением последней строки. Итак, если вам не нужен символ новой строки, вы можете использовать функцию strip(). Здесь есть одна загвоздка: если ваша строка содержит символы пробела в начале и в конце, и если вы используете strip(), вы потеряете эти символы пробела в строке.
В этом примере мы будем читать текстовый файл построчно.
В этом руководстве мы узнали, как читать текстовый файл в Python с помощью примеров программ.
Чтение файлов#
Посмотрим как считывать содержимое файлов, на примере файла r1.txt:
Метод read — считывает весь файл в одну строку.
Пример использования метода read :
При повторном чтении файла в 3 строке, отображается пустая строка. Так происходит из-за того, что при вызове метода read , считывается весь файл. И после того, как файл был считан, курсор остается в конце файла. Управлять положением курсора можно с помощью метода seek .
readline #
Построчно файл можно считать с помощью метода readline :
Но чаще всего проще пройтись по объекту file в цикле, не используя методы read. :
readlines #
Еще один полезный метод — readlines . Он считывает строки файла в список:
Если нужно получить строки файла, но без перевода строки в конце, можно воспользоваться методом split и как разделитель, указать символ \n :
Обратите внимание, что последний элемент списка — пустая строка.
Если перед выполнением split , воспользоваться методом rstrip , список будет без пустой строки в конце:
До сих пор, файл каждый раз приходилось открывать заново, чтобы снова его считать. Так происходит из-за того, что после методов чтения, курсор находится в конце файла. И повторное чтение возвращает пустую строку.
Чтобы ещё раз считать информацию из файла, нужно воспользоваться методом seek , который перемещает курсор в необходимое положение.
Пример открытия файла и считывания содержимого:
Если вызывать ещё раз метод read , возвращается пустая строка:
Но с помощью метода seek можно перейти в начало файла (0 означает начало файла):
После того как с помощью seek курсор был переведен в начало файла, можно опять считывать содержимое:
Чтение только определенных строк (Python)
Я использую цикл for для чтения файла, но я хочу читать только определенные строки, скажем, строки #26 и #30. Есть ли встроенная функция для этого?
24 ответов:
если файл большой, и вы не хотите читать весь файл в память сразу:
отметим, что i == n-1 на n — й линии.
в Python 2.6 или более поздней версии:
- использовать fileobject.readlines() или for line in fileobject как быстрое решение для небольших файлов.
- использовать linecache для более элегантного решения, которое будет довольно быстро для чтения многих файлов, возможно неоднократно.
- взять @советы Алока и использование enumerate() для файлов, которые могут быть очень большими и не помещаются в память. Обратите внимание, что использование этого метода может замедлиться, поскольку файл читается последовательно.
быстрый и компактный подход может быть:
это принимает любой открытый файловый объект thefile (оставляя до вызывающего ли он должен быть открыт из файла на диске, или через например сокет, или другой файловый поток) и набор нулевых индексов строки whatlines , и возвращает список, с низким объемом памяти и разумной скоростью. Если количество возвращаемых строк огромно, вы можете предпочесть генератор:
что в основном только хорошо для зацикливание на — обратите внимание, что единственное отличие заключается в использовании округленных, а не квадратных скобок в return заявление, делая понимание списка и выражение генератора соответственно.
далее отметим, что несмотря на упоминание «строк» и «файлов» этих функций очень много, много более общие — они будут работать на любой iterable, будь то открытый файл или любой другой, возвращающий список (или генератор) элементов на основе их прогрессивного номер позиции. Поэтому я бы предложил использовать более подходящие общие имена; -).