Как считать построчно файл python
Перейти к содержимому

Как считать построчно файл python

  • автор:

Чтение файла построчно в Python

Видимо вы поленились почитать про чтение файлов в python, поскольку сразу за file.read() обычно в учебниках рассказывается о file.readline() и file.readlines() Поэтому у вас 3 варианта:

  1. Читать в цикле файл построчно через file.readline()
  2. Читать весь файл сразу в список через file.readlines() , но тогда вам самостоятельно придется избавляться от символов перевода строки
  3. Читать файл за один раз целиком и обрабатывать его через splitlines() — file.read().splitlines() — тоже сразу в список и без символов перевода строк.

Последний вариант самый привлекательный, на мой взгляд:

with open('numbers.txt', 'r') as f: nums = f.read().splitlines() print(nums) 

Отслеживать
ответ дан 4 янв 2019 в 9:04
25.6k 4 4 золотых знака 21 21 серебряный знак 36 36 бронзовых знаков

в тексте помарка, 3-й пункт — splitlibes() (b — libes). Редактор не хочет принимать правку одной буквы. Исправьте сами)))

Построчные чтение и запись — Python: Основы текстового ввода-вывода

В предыдущем уроке мы упоминали, что последовательные вызовы метода write дописывают текст в конец. Но часто мы имеем итератор, выдающий некий текст построчно. Можно, конечно, написать цикл, однако есть способ и получше: метод writelines . Работает он так:

f = open("foo.txt", "w") f.writelines(["cat\n", "dog\n"]) f.close() f = open("foo.txt", "r") print(f.read()) # => cat # => dog f.close() 

Как вы видите, все строчки записались в нужном порядке. Такой вариант записи предпочтителен, когда нужно записать большой объем текста, который вы получаете и обрабатываете строчка-за-строчкой. Можно предварительно накопить весь текст в одну большую строку, однако для этого может потребоваться большой объём памяти. Гораздо лучше записывать строчки по мере готовности и writelines для этого подходит идеально!

Чтение файла построчно

Файл построчно можно не только писать, но и читать:

f = open("foo.txt") f.readline() # 'cat\n' f.readline() # 'dog\n' f.readline() # '' f.close() 

Здесь Python сам понимает, что строчки в тексте нужно разделять по символу перевода строки. Вызов readline перемещает позицию к следующей строке и как только текст закончится, все последующие вызовы будут возвращать пустую строку.

Заметьте, строчки текста содержат и сами символы перевода строки.

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

f = open("foo.txt") for l in f: print(l) # => cat # => dog f.close() 

Если не указать режим, как я сделал в этот раз, то файл откроется на чтение. Удобно.

Подумайте, почему напечатались лишние пустые строчки.

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

Ленивость позволяет, в частности, не дочитать файл:

f = open("foo.txt") for l in f: print(l) break # => cat print(f.read()) # => dog f.close() 

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

Потоковая обработка больших файлов

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

input_file = open("input.txt", "r") output_file = open("output.txt", "w") for i, line in enumerate(input_file, 1): output_file.write(f"i>) line>") input_file.close() output_file.close() 

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Как прочитать файл построчно в Python

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

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

Пример 1: Чтение файла построчно функцией readline()

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

Как использовать функцию file.readline()

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

  1. Открываем файл в режиме чтения. При этом возвращается дескриптор файла.
  2. Создаём бесконечный цикл while.
    1. В каждой итерации считываем строку файла при помощи readline() .
    2. Если строка не пустая, то выводим её и переходим к следующей. Вы можете проверить это, используя конструкцию if not . В противном случае файл больше не имеет строк и мы останавливаем цикл с помощью break .
     
     
    # получим объект файла file1 = open("sample.txt", "r") while True: # считываем строку line = file1.readline() # прерываем цикл, если строка пустая if not line: break # выводим строку print(line.strip()) # закрываем файл file1.close
    Привет! Добро пожаловать на PythonRu. Удачи в обучении!

    Пример 2: Чтение строк как список функцией readlines()

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

    В следующей программе мы должны открыть текстовый файл и получить список всех его строк, используя функцию readlines() . После этого мы используем цикл for, чтобы обойти данный список.

     
    # получим объект файла file1 = open("sample.txt", "r") # считываем все строки lines = file1.readlines() # итерация по строкам for line in lines: print(line.strip()) # закрываем файл file1.close
    Привет! Добро пожаловать на PythonRu. Удачи в обучении!

    Пример 3: Считываем файл построчно из объекта File

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

    Ниже приводится программа, демонстрирующая применение оператора for-in, для того, чтобы перебрать строки файла.

    Для демонстрации откроем файл с помощью with open. Это применимо и к предыдущим двум примерам.

    Метод file.readline() в Python, читает файл построчно

    Метод файла file.readline() читает одну целую строку из файла. Конечный символ новой строки \n сохраняется в строке. Метод возвращает одну строку или байтовый объект в зависимости от режима, в котором открыт файл функцией open() .

    Если необязательный аргумент size присутствует и неотрицателен, то метод читает строку частями по size байтов, пока не достигнет символ новой строки \n . Если size отрицателен, то считывается строка полностью.

    Пустая строка возвращается только тогда, когда достигнут конец файла, т. е. EOF встречается немедленно.

    • Прочитать файл кусками можно с помощью метода file.read() .
    • Создать список строк из файла file.readlines() .

    Примеры построчного чтения файла.

    • Общий случай использования;
    • Чтение файла при помощи цикла for ;
    • Чтение строк файла кусками.

    Общий случай использования метода файла file.readline() .

    # подготовим файл 'foo.txt' >>> text = 'This is 1st line\nThis is 2nd line\nThis is 3rd line\n' >>> fp = open('foo.txt', 'w+') # запишем текст в файл 'foo.txt' >>> fp.write(text) # 51 # указатель в начало файла >>> fp.seek(0) # 0 # начинаем читать построчно >>> fp.readline() # 'This is 1st line\n' >>> fp.readline() # 'This is 2nd line\n' >>> fp.readline() # 'This is 3rd line\n' >>> fp.readline() # '' >>> fp.close() 

    Чтение файла при помощи цикла for .

    Так как операция открытия файла open() возвращает поток, представляющий из себя генератор строк из файла, то можно итерироваться по нему при помощи функции next() .

    >>> fp = open('foo.txt', 'r') >>> next(fp) # 'This is 1st line\n' >>> next(fp) # 'This is 2nd line\n' >>> next(fp) # 'This is 3rd line\n' >>> next(fp) # Traceback (most recent call last): # File "", line 1, in # StopIteration >>> fp.close() 

    Так как цикл for/in делает то же самое, а именно при прохождении по последовательности вызывает next , следовательно, более просто, читать файл построчно, без ущерба для оперативной памяти можно следующим образом.

    Внимание! Функцию open() предпочтительнее использовать с оператором контекстного менеджера with . При использовании оператора with файл закрывать не нужно:

    >>> with open('foo.txt', 'r') as fp: . for n, line in enumerate(fp, 1): . # Обработка строки 'line' . line = line.rstrip('\n') . print(f"Вывод строки: n>) - line>") . # Вывод строки: 1) - This is 1st line # Вывод строки: 2) - This is 2nd line # Вывод строки: 3) - This is 3rd line 

    Чтение строк файла кусками при помощи цикла while .

    Возможно возникнет вопрос, зачем тогда вообще нужен метод файла file.readline() , если все так просто. Ответы просты. А если необходимо прочитать только одну строку? А если строка файла (до разделителя строки \n ) очень длинная и не умещается в оперативной памяти, то тогда приходит на помощь метод файла file.readline() , т.к. он умеет разбивать строку файла на куски.

    >>> fp = open('foo.txt', 'r') # будем читать строку по 10 байт >>> line = fp.readline(10) >>> while line: . line = line.rstrip('\n') . print(line) . line = fp.readline(10) . # This is 1s # t line # This is 2n # d line # This is 3r # d line >>> fp.close() 
    • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
    • Метод file.close(), закрывает файл
    • Метод file.flush(), очищает буфер чтения
    • Метод file.fileno(), получает файловый дескриптор
    • Метод file.isatty(), проверяет связь с терминалом
    • Метод file.read(), читает весь файл или кусками
    • Метод file.readline(), читает файл построчно
    • Метод file.readlines(), получает список строк файла
    • Метод file.seek(), перемещает указатель в файле
    • Метод file.tell(), позиция указателя в файле
    • Метод file.truncate(), усекает размер файла
    • Метод file.write(), пишет данные в файл
    • Метод file.writelines(), пишет список строк в файл

Добавить комментарий

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