Чтение из файлов в Python
Открыл как книгу и прочитал - что сложного?
В Python есть 2 способа чтения файлов - с помощью итерации и с помощью методов. Учитывайте, что при чтении файла перемещается виртуальный “курсор” в файле.
Чтение с помощью методов
Есть несколько методов, позволяющих читать файлы:
-
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
-
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)
-
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)
-
seek(offset, from)
- перемещает курсор в файле наoffset
позиции (отрицательные значения принимаются) относительноfrom
(0 - начало (по умолчанию), 1 - текущая позиция, 2 - конец)with open('file.txt') as file: file.seek(10) content = file.read() # с 10 позиции print(content)
-
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='')