- Питон считать строки в файле
- Чтение файла
- Файлы в python, ввод-вывод
- Файлы Python
- Текстовые файлы
- Бинарные файлы
- Открытие файла
- Метод open()
- Пример
- Закрытие файла
- Метод close()
- Инструкция with
- Чтение и запись файлов в Python
- Функция read()
- Функция readline()
- Функция write()
- Переименование файлов в Python
- Функция rename()
- Текущая позиция в файлах Python
- Методы файла в Python
Питон считать строки в файле
Чтобы открыть текстовый файл на запись, необходимо применить режим w (перезапись) или a (дозапись). Затем для записи применяется метод write(str) , в который передается записываемая строка. Стоит отметить, что записывается именно строка, поэтому, если нужно записать числа, данные других типов, то их предварительно нужно конвертировать в строку.
Запишем некоторую информацию в файл «hello.txt»:
with open("hello.txt", "w") as file: file.write("hello world")
Если мы откроем папку, в которой находится текущий скрипт Python, то увидем там файл hello.txt. Этот файл можно открыть в любом текстовом редакторе и при желании изменить.
Теперь дозапишем в этот файл еще одну строку:
with open("hello.txt", "a") as file: file.write("\ngood bye, world")
Дозапись выглядит как добавление строку к последнему символу в файле, поэтому, если необходимо сделать запись с новой строки, то можно использовать эскейп-последовательность «\n». В итоге файл hello.txt будет иметь следующее содержимое:
hello world good bye, world
Еще один способ записи в файл представляет стандартный метод print() , который применяется для вывода данных на консоль:
with open("hello.txt", "a") as hello_file: print("Hello, world", file=hello_file)
Для вывода данных в файл в метод print в качестве второго параметра передается название файла через параметр file. А первый параметр представляет записываемую в файл строку.
Чтение файла
Для чтения файла он открывается с режимом r (Read), и затем мы можем считать его содержимое различными методами:
- readline() : считывает одну строку из файла
- read() : считывает все содержимое файла в одну строку
- readlines() : считывает все строки файла в список
Например, считаем выше записанный файл построчно:
with open("hello.txt", "r") as file: for line in file: print(line, end="")
Несмотря на то, что мы явно не применяем метод readline() для чтения каждой строки, но в при переборе файла этот метод автоматически вызывается для получения каждой новой строки. Поэтому в цикле вручную нет смысла вызывать метод readline. И поскольку строки разделяются символом перевода строки «\n», то чтобы исключить излишнего переноса на другую строку в функцию print передается значение end=»» .
Теперь явным образом вызовем метод readline() для чтения отдельных строк:
with open("hello.txt", "r") as file: str1 = file.readline() print(str1, end="") str2 = file.readline() print(str2)
hello world good bye, world
Метод readline можно использовать для построчного считывания файла в цикле while:
with open("hello.txt", "r") as file: line = file.readline() while line: print(line, end="") line = file.readline()
Если файл небольшой, то его можно разом считать с помощью метода read() :
with open("hello.txt", "r") as file: content = file.read() print(content)
И также применим метод readlines() для считывания всего файла в список строк:
with open("hello.txt", "r") as file: contents = file.readlines() str1 = contents[0] str2 = contents[1] print(str1, end="") print(str2)
При чтении файла мы можем столкнуться с тем, что его кодировка не совпадает с ASCII. В этом случае мы явным образом можем указать кодировку с помощью параметра encoding :
filename = "hello.txt" with open(filename, encoding="utf8") as file: text = file.read()
Теперь напишем небольшой скрипт, в котором будет записывать введенный пользователем массив строк и считывать его обратно из файла на консоль:
# имя файла FILENAME = "messages.txt" # определяем пустой список messages = list() for i in range(4): message = input("Введите строку " + str(i+1) + ": ") messages.append(message + "\n") # запись списка в файл with open(FILENAME, "a") as file: for message in messages: file.write(message) # считываем сообщения из файла print("Считанные сообщения") with open(FILENAME, "r") as file: for message in file: print(message, end="")
Введите строку 1: hello Введите строку 2: world peace Введите строку 3: great job Введите строку 4: Python Считанные сообщения hello world peace great job Python
Файлы в python, ввод-вывод
Эта статья посвящена работе с файлами (вводу/выводу) в Python: открытие, чтение, запись, закрытие и другие операции.
Файлы Python
Файл — это всего лишь набор данных, сохраненный в виде последовательности битов на компьютере. Информация хранится в куче данных (структура данных) и имеет название «имя файла» (filename).
В Python существует два типа файлов:
Текстовые файлы
Это файлы с человекочитаемым содержимым. В них хранятся последовательности символов, которые понимает человек. Блокнот и другие стандартные редакторы умеют читать и редактировать этот тип файлов.
Текст может храниться в двух форматах: ( .txt ) — простой текст и ( .rtf ) — «формат обогащенного текста».
Бинарные файлы
В бинарных файлах данные отображаются в закодированной форме (с использованием только нулей (0) и единиц (1) вместо простых символов). В большинстве случаев это просто последовательности битов.
Они хранятся в формате .bin .
Любую операцию с файлом можно разбить на три крупных этапа:
Открытие файла
Метод open()
В Python есть встроенная функция open() . С ее помощью можно открыть любой файл на компьютере. Технически Python создает на его основе объект.
f = open(file_name, access_mode)
- file_name = имя открываемого файла
- access_mode = режим открытия файла. Он может быть: для чтения, записи и т. д. По умолчанию используется режим чтения ( r ), если другое не указано. Далее полный список режимов открытия файла
Пример
Создадим текстовый файл example.txt и сохраним его в рабочей директории.
Следующий код используется для его открытия.
f = open('example.txt','r') # открыть файл из рабочей директории в режиме чтения fp = open('C:/xyz.txt','r') # открыть файл из любого каталога
В этом примере f — переменная-указатель на файл example.txt .
Следующий код используется для вывода содержимого файла и информации о нем.
>>> print(*f) # выводим содержимое файла This is a text file. >>> print(f) # выводим объект _io.TextIOWrapper name='example.txt' mode='r' encoding='cp1252'>
Стоит обратить внимание, что в Windows стандартной кодировкой является cp1252 , а в Linux — utf-08 .
Закрытие файла
Метод close()
После открытия файла в Python его нужно закрыть. Таким образом освобождаются ресурсы и убирается мусор. Python автоматически закрывает файл, когда объект присваивается другому файлу.
Существуют следующие способы:
Проще всего после открытия файла закрыть его, используя метод close() .
f = open('example.txt','r') # работа с файлом f.close()
После закрытия этот файл нельзя будет использовать до тех пор, пока заново его не открыть.
Также можно написать try/finally , которое гарантирует, что если после открытия файла операции с ним приводят к исключениям, он закроется автоматически.
Без него программа завершается некорректно.
Вот как сделать это исключение:
f = open('example.txt','r') try: # работа с файлом finally: f.close()
Файл нужно открыть до инструкции try , потому что если инструкция open сама по себе вызовет ошибку, то файл не будет открываться для последующего закрытия.
Этот метод гарантирует, что если операции над файлом вызовут исключения, то он закроется до того как программа остановится.
Инструкция with
Еще один подход — использовать инструкцию with , которая упрощает обработку исключений с помощью инкапсуляции начальных операций, а также задач по закрытию и очистке.
В таком случае инструкция close не нужна, потому что with автоматически закроет файл.
Вот как это реализовать в коде.
with open('example.txt') as f: # работа с файлом
Чтение и запись файлов в Python
В Python файлы можно читать или записывать информацию в них с помощью соответствующих режимов.
Функция read()
Функция read() используется для чтения содержимого файла после открытия его в режиме чтения ( r ).
- file = объект файла
- size = количество символов, которые нужно прочитать. Если не указать, то файл прочитается целиком.
>>> f = open('example.txt','r') >>> f.read(7) # чтение 7 символов из example.txt 'This is '
Интерпретатор прочитал 7 символов файла и если снова использовать функцию read() , то чтение начнется с 8-го символа.
>>> f.read(7) # чтение следующих 7 символов ' a text'
Функция readline()
Функция readline() используется для построчного чтения содержимого файла. Она используется для крупных файлов. С ее помощью можно получать доступ к любой строке в любой момент.
Создадим файл test.txt с нескольким строками:
This is line1. This is line2. This is line3.
Посмотрим, как функция readline() работает в test.txt .
>>> x = open('test.txt','r') >>> x.readline() # прочитать первую строку This is line1. >>> x.readline(2) # прочитать вторую строку This is line2. >>> x.readlines() # прочитать все строки ['This is line1.','This is line2.','This is line3.']
Обратите внимание, как в последнем случае строки отделены друг от друга.
Функция write()
Функция write() используется для записи в файлы Python, открытые в режиме записи.
Если пытаться открыть файл, которого не существует, в этом режиме, тогда будет создан новый.
Предположим, файла xyz.txt не существует. Он будет создан при попытке открыть его в режиме чтения.
>>> f = open('xyz.txt','w') # открытие в режиме записи >>> f.write('Hello \n World') # запись Hello World в файл Hello World >>> f.close() # закрытие файла
Переименование файлов в Python
Функция rename()
Функция rename() используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.
import os os.rename(src,dest)
>>> import os >>> # переименование xyz.txt в abc.txt >>> os.rename("xyz.txt","abc.txt")
Текущая позиция в файлах Python
В Python возможно узнать текущую позицию в файле с помощью функции tell() . Таким же образом можно изменить текущую позицию командой seek() .
>>> f = open('example.txt') # example.txt, который мы создали ранее >>> f.read(4) # давайте сначала перейдем к 4-й позиции This >>> f.tell() # возвращает текущую позицию 4 >>> f.seek(0,0) # вернем положение на 0 снова
Методы файла в Python
file.close() | закрывает открытый файл |
file.fileno() | возвращает целочисленный дескриптор файла |
file.flush() | очищает внутренний буфер |
file.isatty() | возвращает True, если файл привязан к терминалу |
file.next() | возвращает следующую строку файла |
file.read(n) | чтение первых n символов файла |
file.readline() | читает одну строчку строки или файла |
file.readlines() | читает и возвращает список всех строк в файле |
file.seek(offset[,whene]) | устанавливает текущую позицию в файле |
file.seekable() | проверяет, поддерживает ли файл случайный доступ. Возвращает True , если да |
file.tell() | возвращает текущую позицию в файле |
file.truncate(n) | уменьшает размер файл. Если n указала, то файл обрезается до n байт, если нет — до текущей позиции |
file.write(str) | добавляет строку str в файл |
file.writelines(sequence) | добавляет последовательность строк в файл |