Всё о Python

Чтение из файлов в Python

Открыл как книгу и прочитал - что сложного?

В Python есть 2 способа чтения файлов - с помощью итерации и с помощью методов. Учитывайте, что при чтении файла перемещается виртуальный “курсор” в файле.

Чтение с помощью методов

Есть несколько методов, позволяющих читать файлы:

  1. read(size) - читает size байтов; если size не указан, читает весь файл (сдвигает курсор)

    with open('file.txt', 'r') as file:
        content: str = file.read() # весь файл
        print(content)
    
    with open('file.txt', 'r') as file:
        first: str = file.read(1) # первый символ
        print(first) # L
        second: str = file.read(1) # второй символ
        print(second) # o
    
  2. readline() - читает size байтов из текущей строки, если указать больше длины строки, то функция просто дочитает до конца; если size не указан, читает с текущей позиции до конца строки (в конце файла всегда будет возвращаться пустая строка)

    with open('file.txt', 'r') as file:
        line: str = file.readline() # первая строка
        print(line) # abc
        line: str = file.readline() # вторая строка
        print(line) # def
    
    with open('file.txt', 'r') as file:
        first: str = file.readline(1) # 1 символ из первой строки
        print(first)
        line: str = file.readline() # остальные символы
        print(line)
    
  3. readlines() - читает все строки из файла, возвращая их в виде списка

    readlines(size) - читает все строки из файла, пока не достигнет size байтов

    with open('file.txt') as file:
        lines: list[str] = file.readlines() # возвращает список строк
        print(lines) # ["abc\n", "def\n", "ghi"]
    
    with open('file.txt') as file:
        lines: list[str] = file.readlines(10) # чтение строк, пока размер не достигнет 10 байтов
        print(lines)
    
  4. seek(offset, from) - перемещает курсор в файле на offset позиции (отрицательные значения принимаются) относительно from (0 - начало (по умолчанию), 1 - текущая позиция, 2 - конец)

    with open('file.txt') as file:
        file.seek(10)
        content = file.read() # с 10 позиции
        print(content)
    
  5. tell() -> int - возвращает текущую позицию курсора в файле

    with open('file.txt') as file:
        content = file.read()
        print(content)
        position = file.tell()
        print(position) # int
    

Чтение с помощью итерации

Можно получить список строк:

with open('file.txt') as file:
    lines: list[str] = list(file) # ["abc\n", "def\n", "ghi"]

Или с помощью цикла for:

with open('file.txt') as file:
    for line in file:
        print(line, end='')