Работа с файлами в Python: функции чтение, запись в файл
Давайте подробно разберем, как с помощью Python происходит открытие, чтение и запись файлов. Для лучшего понимание руководство сопровождается фрагментами кода.
Любая программа, написанная на языке Python, имеет не только функциональную часть — она также оптимизирована для работы с файлами. К примеру, при написании бота, автоматически отвечающего за запросы пользователя, придется добавить в него заранее подготовленные ответы в отдельном текстовом документе. Разрабатываете приложение для редактирования изображений — тогда код должен выполнять обработку файлов, загруженных пользователем. Чтобы все это реализовать, вы обязаны знать, как работать с файлами на языке Python, и какие для этого нужны функции.
Файл. Что это?
Устройство, работающее на базе операционной системы, имеет файлы. Это набор данных с собственным названием, который хранится на этом устройстве или компьютере. Несколько файловых объектов для удобства или классификации сохраняют в папках или директориях. В Python, как и в других языках программирования, файлы используются для сохранения итогов работы приложения или извлечения из них данных для последующей кодовой обработки.
При работе с файлами наиболее часто используемыми командами будет:
- открытие;
- чтение;
- запись;
- закрытие;
- удаление.
Теперь пришло время изучить, как все это выполнять.
Открываем файл для чтения и записи в Python
Что открыть файл в Python применяется функция open(). Ниже вы видите фрагмент кода, объясняющий эту команду:
file = open('doc.txt', 'r') # 'r'
В конце строки кода можно заметить аргумент # ‘r’. Его присутствие означает, что документ открыт только для чтения. При необходимости вы можете изменить этот аргумент, добавив вместо него ‘w’. Это означает, что файл доступен не только для чтения, но и для записи.
Характерной особенностью синтаксиса Python является то, что после открытия и работы с файлом его приходится закрывать командой file.close(). Закрытие можно автоматизировать с помощью контекстного менеджера with:
with open(doc.txt', 'r') as file: content = file.read() print(content)
В данном фрагменте мы видим наличие контекстного менеджера, который сам закрывает файл после завершения работы. Автоматическое закрытие препятствует возможным ошибкам.
При написании команды открытия файла вы можете указать его кодировку:
with open('doc.txt', 'w+', encoding='Windows-1251') as f:
Также вы можете указать кодировку при обычном открытии файла, без автоматического закрытия:
f = open('doc.txt', 'w+', encoding='Windows-1251') # тут мы что-то делаем f.close()
Как читать данные файла в Python
Чтение данных в Python реализуется функцией read(). Перед вами фрагмент кода, который это демонстрирует:
file.read(size)
Здесь file показывает объект для дальнейшего чтения, а параметр size — сколько символов нужно прочитать. Если параметр не указывать, то пользователь сможет прочитать все данные из этого файла.
Давайте сейчас создадим файл highload.txt и запишем в него строку «Welcome to My Page!». Теперь прочитаем первые семь символов из этого файла:
with open('highload.txt', 'r', encoding='Windows-1251') as f: data = f.read(7) print(data) >>> Welcome to My Page!
После запуска кода Python отображает лишь первое слово «Welcome» — первые семь символов строки «Welcome to My Page!» в highload.txt.
Если же во фрагменте кода не указывать аргументы после функции read(), то Python покажет всю информацию. В данном случае, всю строку «Welcome to My Page!».
Информацию можно читать построчно при помощи функции readline(). К примеру, в нашем файле присутствуют четыре строки:
- Apple
- Plum
- Banana
- Strawberry
Давайте прочитаем только первую строку из этого файла, не указывая количество символов.
with open('highload.txt', 'r', encoding='Windows-1251') as f: print(f.readline()) >>> Apple
Как видите, Python отобразил только первую строку из этого списка. При неоднократном вызове readline() вы сможете прочитать все остальные строки:
with open('highload.txt', 'r', encoding='Windows-1251') as f: print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline()) >>> Apple >>> Plum >>> Banana >>> Strawberry
Но согласитесь, постоянно указывать одну и ту же функцию не совсем удобно. Чтобы сделать процесс более привлекательным, лучше отобразить readline() в цикле:
with open('highload.txt', 'r', encoding='Windows-1251') as f: for line in f: print(line) >>> Apple >>> Plum >>> Banana >>> Strawberry
Есть еще один вариант. В нем вся инфа читается в одну строку. В этом помогает метод readlines(), возвращающий информацию как перечисление со спецсимволами:
with open('highload.txt', 'r', encoding='Windows-1251') as f: data = f.readlines() print(data) >>> ['Apple\n', 'Plum\n', 'Banana\n', 'Strawberry']
Альтернативой может стать конструктор списков list():
with open('highload.txt', 'r', encoding='Windows-1251') as f: data = list(f) print(data) >>> ['Apple\n', 'Plum\n', 'Banana\n', 'Strawberry']
Если документ слишком велик, то рекомендуется не перегружать оперативку в ПК, а считывать его по частям.
Как на Python сделать запись в файл
Чтобы выполнить запись в файл на Python, нужны функции write() и open() с режимами записи (‘w’, ‘a’, ‘w+’, ‘a+’). Давайте рассмотрим несколько примеров:
1. Запись (‘w’)
Режим ‘w’ — запись (если файл существует, его содержимое будет удалено).
with open('highload.txt', 'w') as file: file.write("Welcome to My Page!!\n") file.write("2024.\n")
2. Добавление (‘a’)
Режим ‘a’ — добавление данных (добавляет данные в конец файла).
with open('highload.txt', 'a') as file: file.write("New Year.\n")
3. Запись и чтение в одном файле (‘w+’)
Режим ‘w+’ — запись и чтение (файл будет очищен, если он существует).
with open('highload.txt', 'w+') as file: file.write("Writing and reading in the same file.\n") file.seek(0) # перемещаем курсор в первую строку content = file.read() # считываем данные print("More text here:") print(content)
4. Добавление с возможностью чтения (‘a+’)
Режим ‘a+’ — добавление и чтение (добавляет данные в конец файла).
with open('highload.txt', 'a+') as file: file.write("New Year.\n") file.seek(0) content = file.read() print("More text here after adding:") print(content)
Работа с файловой системой в Python
Работа с файловой системой — неотъемлемая часть обязанностей любого джуниора. Поначалу придется учиться обрабатывать данные из файлов, сохранять их или управлять структурой каталогов. Поскольку мы уже знаем, как открывать и закрывать файлы в Python, и как записывать в них данные, теперь на нужно ознакомиться с другими файловыми операциями, которые могут понадобиться новичку.
Работа с папками
В синтаксисе Python имеется специальный модуль os для работы с файловой системой. Вот пару примеров, как он используется.
Создание новой папки:
import os os.mkdir('new_folder')
Проверка наличия файла или папки:
if os.path.exists('highload.txt'): print("Файл существует")
Получение списка файлов в директории:
files = os.listdir('.') print("Файлы в текущей директории:", files)
Удаление файла или папки:
os.remove('highload.txt') # Удаляет файл os.rmdir('new_folder') # Удаляет пустую папку
Работа с путями
Применяя модуль os.path, можно работать с путями к файлам и папкам. Перед нами пример, как получить абсолютный путь:
import os abs_path = os.path.abspath('highload.txt') print("Абсолютный путь к файлу:", abs_path)
Пример комплексного использования
В этом примере создается новая папка, в ней записывается файл, а затем читаются его данные:
import os # Создаем новую папку os.mkdir('test_folder') # Путь к файлу file_path = os.path.join('test_folder', 'highload.txt') # Запись в файл with open(file_path, 'w') as file: file.write("Hello from the new folder!") # Чтение из файла with open(file_path, 'r') as file: content = file.read() print("Содержимое файла:") print(content) # Удаление файла и папки os.remove(file_path) os.rmdir('test_folder')
В вышеуказанном примере Python создает папку test_folder, затем записывает в ней файл highload.txt, читает его, а затем удаляет, как файл, так и всю папку.
Заключение
Работа с файлами и файловой системой в Python состоит из нескольких относительно простых команд. Владеть этими базовыми операциями – это ключевой навык любого начинающего разработчика. Умея работать с файлами, вы сможете сохранять данные для дальнейшего использования: записывать результаты вычислений, сохранять настройки и логи приложения, а также пользовательскую информацию.
Владея командами для обработки данных, вы сможете решать задачи, относящиеся к извлечению и сохранению их в разных форматах. Кроме того, они помогают в автоматизации многих рутинных задач: например, при необходимости резервного копирования множества файлов.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: