В реальных проектах данные редко хранят только в оперативной памяти. Представьте: вы написали программу, которая собирает важную информацию, но стоит её закрыть — и всё исчезает. Чтобы этого не произошло, данные нужно сохранять на диск. Или, наоборот, считывать уже сохранённые. Для этого и нужна работа с файлами.
Открываем и закрываем файлы
Для работы с файлами в Python используем встроенную функцию open(). Она возвращает специальный файловый объект, который умеет читать и записывать.
Синтаксис open():
open(file, mode='r', encoding=None)
file: путь к файлу. Например,"my_data.txt".mode: режим открытия файла. Это очень важный параметр:'r'(read): читать файл (режим по умолчанию). Файла нет? Будет ошибка.'w'(write): записать в файл. Файла нет? Он создастся. Файл есть? Его содержимое перезапишется. Будьте осторожны!'a'(append): дозаписать в файл. Файла нет? Он создастся. Файл есть? Новые данные добавятся в конец.'x'(exclusive creation): создать файл. Файл уже есть? Будет ошибка.'b'(binary): бинарный режим (для изображений, аудио). Используется вместе сr,w,a(например,'rb','wb').'t'(text): текстовый режим (по умолчанию). Используется вместе сr,w,a(например,'rt','wt').
encoding: кодировка файла. Например,'utf-8'. В России часто используют'utf-8'или'cp1251'для старых файлов. Всегда указывайте'utf-8'— это хорошая практика.
После работы файл нужно обязательно закрыть методом close(). Это освобождает системные ресурсы и гарантирует, что все изменения сохранятся.
# Открываем файл для чтения
file_read = open("my_text.txt", "r", encoding="utf-8")
# ... работаем с файлом ...
file_read.close() # Закрываем!
# Открываем файл для записи (перезапишет или создаст новый)
file_write = open("new_text.txt", "w", encoding="utf-8")
# ... работаем с файлом ...
file_write.close() # Закрываем!
Важно: Забыть закрыть файл — частая ошибка новичков. Это может привести к потере данных, повреждению файлов или блокировке доступа к ним для других программ.
Читаем данные из файла
Открыли файл в режиме чтения ('r')? Теперь можно получить его содержимое:
read(): считывает весь файл целиком в одну строку.readline(): считывает одну строку из файла.readlines(): считывает все строки файла и возвращает их списком.
# Создадим файл для примера
with open("example.txt", "w", encoding="utf-8") as f:
f.write("Привет, мир!\n")
f.write("Это вторая строка.\n")
f.write("И это третья.")
# Читаем весь файл
with open("example.txt", "r", encoding="utf-8") as f:
content = f.read()
print("Содержимое файла (read()):")
print(content)
# Читаем файл построчно
with open("example.txt", "r", encoding="utf-8") as f:
print("\nСодержимое файла (readline()):")
line1 = f.readline()
line2 = f.readline()
print(f"Первая строка: {line1.strip()}") # .strip() убирает перенос строки
print(f"Вторая строка: {line2.strip()}")
# Читаем все строки в список
with open("example.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print("\nСодержимое файла (readlines()):")
for line in lines:
print(line.strip())
Записываем данные в файл
Для записи в файл, открытый в режиме записи ('w') или дозаписи ('a'), используем:
write(string): записывает строку в файл. Важно:write()не добавляет символ новой строки (\n) автоматически. Добавляйте его вручную, если нужно.writelines(list_of_strings): записывает список строк в файл. Каждая строка из списка записывается последовательно, без разделителей.
# Записываем в новый файл (или перезаписываем существующий)
with open("output.txt", "w", encoding="utf-8") as f:
f.write("Это первая строка.\n")
f.write("Это вторая строка.\n")
f.write("И это последняя строка.")
# Дозаписываем в файл
with open("output.txt", "a", encoding="utf-8") as f:
f.write("\nДобавим новую строку в конец.")
# Записываем список строк
data_list = ["Яблоко\n", "Банан\n", "Апельсин\n"]
with open("fruits.txt", "w", encoding="utf-8") as f:
f.writelines(data_list)
print("\nПроверьте файлы 'output.txt' и 'fruits.txt' в вашей директории!")
Практическое задание 🚀
- Создайте файл
my_diary.txt. Запишите в него несколько строк о вашем дне, используя режим записи ('w'). - Откройте этот же файл в режиме дозаписи (
'a') и добавьте ещё одну запись о планах на завтра. - Прочитайте весь файл
my_diary.txtцеликом и выведите его содержимое в консоль.
Работа с файлами — это базовая, но очень важная часть программирования. Вы могли заметить, что ручное открытие и закрытие файлов может быть неудобным и чревато ошибками. К счастью, в Python есть более элегантное и безопасное решение, о котором мы поговорим на следующей странице. 😉