Запись в файлы позволяет сохранять данные для последующего использования. Python предоставляет несколько способов записи данных в файлы различного формата.
Рассмотрим основные методы записи данных в файлы:
# Запись строки в файл
with open("пример.txt", "w", encoding="utf-8") as файл:
файл.write("Привет, мир!\n")
файл.write("Это вторая строка.\n")
# Чтение файла для проверки
with open("пример.txt", "r", encoding="utf-8") as файл:
содержимое = файл.read()
print("Содержимое файла:")
print(содержимое)
# Запись чисел (нужно преобразовать в строку)
числа = [1, 2, 3, 4, 5]
with open("числа.txt", "w", encoding="utf-8") as файл:
for число in числа:
файл.write(str(число) + "\n")
# Чтение чисел
with open("числа.txt", "r", encoding="utf-8") as файл:
for строка in файл:
print(int(строка.strip()))
Различные режимы открытия файлов для записи:
# Режим "w" - перезапись файла
with open("тест.txt", "w", encoding="utf-8") as файл:
файл.write("Первая строка\n")
# Повторная запись в режиме "w" удаляет предыдущее содержимое
with open("тест.txt", "w", encoding="utf-8") as файл:
файл.write("Вторая строка\n")
with open("тест.txt", "r", encoding="utf-8") as файл:
print(f"Содержимое после перезаписи: {файл.read()}")
# Режим "a" - добавление в конец файла
with open("тест.txt", "a", encoding="utf-8") as файл:
файл.write("Третья строка (добавлена)\n")
with open("тест.txt", "r", encoding="utf-8") as файл:
print(f"Содержимое после добавления: {файл.read()}")
# Режим "x" - создание нового файла (ошибка, если файл существует)
try:
with open("новый_файл.txt", "x", encoding="utf-8") as файл:
файл.write("Это новый файл\n")
print("Файл успешно создан")
except FileExistsError:
print("Файл уже существует!")
Метод writelines() позволяет записать список строк в файл:
# Создание списка строк
строки = [
"Первая строка\n",
"Вторая строка\n",
"Третья строка\n"
]
# Запись списка строк в файл
with open("список.txt", "w", encoding="utf-8") as файл:
файл.writelines(строки)
# Чтение для проверки
with open("список.txt", "r", encoding="utf-8") as файл:
print("Содержимое файла:")
print(файл.read())
# Запись списка без добавления символов новой строки
данные = ["Яблоко", "Банан", "Груша", "Апельсин"]
with open("фрукты.txt", "w", encoding="utf-8") as файл:
for фрукт in данные:
файл.write(фрукт + "\n")
# Или с использованием join()
with open("фрукты2.txt", "w", encoding="utf-8") as файл:
файл.write("\n".join(данные))
Python позволяет записывать данные в различные форматы файлов:
# Запись данных в формате CSV
студенты = [
["Имя", "Возраст", "Курс"],
["Анна", "25", "Информатика"],
["Борис", "30", "Математика"],
["Виктория", "22", "Физика"]
]
with open("студенты.csv", "w", encoding="utf-8") as файл:
for строка in студенты:
файл.write(",".join(строка) + "\n")
# Чтение CSV файла для проверки
with open("студенты.csv", "r", encoding="utf-8") as файл:
print("Содержимое CSV файла:")
for строка in файл:
print(строка.strip())
# Более удобный способ с использованием модуля csv
import csv
with open("студенты2.csv", "w", encoding="utf-8", newline="") as файл:
writer = csv.writer(файл)
writer.writerows(студенты)
# Чтение с помощью csv.reader
with open("студенты2.csv", "r", encoding="utf-8") as файл:
reader = csv.reader(файл)
print("\nСодержимое CSV файла (с csv.reader):")
for строка in reader:
print(строка)
import json
# Данные для записи в JSON
данные = {
"студенты": [
{"имя": "Анна", "возраст": 25, "курс": "Информатика"},
{"имя": "Борис", "возраст": 30, "курс": "Математика"},
{"имя": "Виктория", "возраст": 22, "курс": "Физика"}
],
"количество": 3
}
# Запись данных в JSON файл
with open("данные.json", "w", encoding="utf-8") as файл:
json.dump(данные, файл, ensure_ascii=False, indent=2)
# Чтение JSON файла для проверки
with open("данные.json", "r", encoding="utf-8") as файл:
прочитанные_данные = json.load(файл)
print("Данные из JSON файла:")
print(json.dumps(прочитанные_данные, ensure_ascii=False, indent=2))
# Запись списка в JSON
список = ["яблоко", "банан", "груша", "апельсин"]
with open("список.json", "w", encoding="utf-8") as файл:
json.dump(список, файл, ensure_ascii=False, indent=2)
Для записи бинарных данных используется режим "wb":
# Запись бинарных данных
данные = bytes([0, 1, 2, 3, 4, 5])
with open("бинарные_данные.bin", "wb") as файл:
файл.write(данные)
# Чтение бинарных данных
with open("бинарные_данные.bin", "rb") as файл:
прочитанные_данные = файл.read()
print(f"Прочитанные данные: {прочитанные_данные}")
# Запись изображения (если есть файл)
# with open("исходное_изображение.png", "rb") as исходный:
# with open("копия_изображения.png", "wb") as копия:
# копия.write(исходный.read())
Рассмотрим несколько практических примеров записи в файлы:
import datetime
def записать_в_лог(сообщение, уровень="INFO"):
# Формат времени
время = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# Запись в лог-файл
with open("приложение.log", "a", encoding="utf-8") as файл:
файл.write(f"[{время}] {уровень}: {сообщение}\n")
# Пример использования
записать_в_лог("Приложение запущено")
записать_в_лог("Пользователь вошел в систему", "INFO")
записать_в_лог("Низкий уровень памяти", "WARNING")
записать_в_лог("Ошибка подключения к базе данных", "ERROR")
# Чтение лог-файла
with open("приложение.log", "r", encoding="utf-8") as файл:
print("Содержимое лог-файла:")
print(файл.read())
import json
# Настройки приложения
настройки = {
"тема": "светлая",
"язык": "русский",
"автосохранение": True,
"интервал_автосохранения": 5,
"последние_файлы": [
"документ1.txt",
"документ2.txt"
]
}
# Сохранение настроек
def сохранить_настройки(настройки, файл_настроек="настройки.json"):
try:
with open(файл_настроек, "w", encoding="utf-8") as файл:
json.dump(настройки, файл, ensure_ascii=False, indent=2)
print("Настройки успешно сохранены")
except Exception as e:
print(f"Ошибка при сохранении настроек: {e}")
# Загрузка настроек
def загрузить_настройки(файл_настроек="настройки.json"):
try:
with open(файл_настроек, "r", encoding="utf-8") as файл:
return json.load(файл)
except FileNotFoundError:
print("Файл настроек не найден, используются настройки по умолчанию")
return None
except Exception as e:
print(f"Ошибка при загрузке настроек: {e}")
return None
# Сохранение настроек
сохранить_настройки(настройки)
# Загрузка и вывод настроек
загруженные_настройки = загрузить_настройки()
if загруженные_настройки:
print("Загруженные настройки:")
print(json.dumps(загруженные_настройки, ensure_ascii=False, indent=2))
Задание 1:
import json
from datetime import datetime
class СписокДел:
def __init__(self):
self.дела = []
def добавить_дело(self, описание):
дело = {
"описание": описание,
"дата_создания": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
"выполнено": False
}
self.дела.append(дело)
def отметить_выполненным(self, индекс):
if 0 <= индекс < len(self.дела):
self.дела[индекс]["выполнено"] = True
def показать_дела(self):
for i, дело in enumerate(self.дела):
статус = "✓" if дело["выполнено"] else "○"
print(f"{i+1}. [{статус}] {дело['описание']} ({дело['дата_создания']})")
def сохранить_в_файл(self, имя_файла="дела.json"):
try:
with open(имя_файла, "w", encoding="utf-8") as файл:
json.dump(self.дела, файл, ensure_ascii=False, indent=2)
print(f"Список дел сохранен в файл '{имя_файла}'")
except Exception as e:
print(f"Ошибка при сохранении: {e}")
def загрузить_из_файла(self, имя_файла="дела.json"):
try:
with open(имя_файла, "r", encoding="utf-8") as файл:
self.дела = json.load(файл)
print(f"Список дел загружен из файла '{имя_файла}'")
except FileNotFoundError:
print("Файл не найден, создан новый список дел")
except Exception as e:
print(f"Ошибка при загрузке: {e}")
# Пример использования
список = СписокДел()
# Добавляем несколько дел
список.добавить_дело("Изучить Python")
список.добавить_дело("Сделать домашнее задание")
список.добавить_дело("Погулять")
# Отмечаем выполненным
список.отметить_выполненным(0)
# Показываем список
print("Текущий список дел:")
список.показать_дела()
# Сохраняем в файл
список.сохранить_в_файл()
# Создаем новый список и загружаем из файла
новый_список = СписокДел()
новый_список.загрузить_из_файла()
print("\nЗагруженный список дел:")
новый_список.показать_дела()
Задание 2:
def сохранить_таблицу_умножения(размер=10, имя_файла="таблица_умножения.txt"):
try:
with open(имя_файла, "w", encoding="utf-8") as файл:
# Записываем заголовок
заголовок = " " + " ".join([f"{i:3}" for i in range(1, размер + 1)])
файл.write(заголовок + "\n")
файл.write(" " + "-" * (размер * 4 - 1) + "\n")
# Записываем строки таблицы
for i in range(1, размер + 1):
строка = f"{i:2} |"
for j in range(1, размер + 1):
строка += f"{i * j:3} "
файл.write(строка + "\n")
print(f"Таблица умножения сохранена в файл '{имя_файла}'")
except Exception as e:
print(f"Ошибка при сохранении: {e}")
# Создаем таблицу умножения 10x10
сохранить_таблицу_умножения(10)
# Читаем и выводим содержимое файла
with open("таблица_умножения.txt", "r", encoding="utf-8") as файл:
print("Таблица умножения:")
print(файл.read())
Задание 3:
import csv
class Контакты:
def __init__(self, имя_файла="контакты.csv"):
self.имя_файла = имя_файла
self.заголовки = ["Имя", "Телефон", "Email"]
self.создать_файл_если_нужно()
def создать_файл_если_нужно(self):
try:
with open(self.имя_файла, "r", encoding="utf-8") as файл:
pass # Файл существует
except FileNotFoundError:
# Создаем файл с заголовками
with open(self.имя_файла, "w", encoding="utf-8", newline="") as файл:
writer = csv.writer(файл)
writer.writerow(self.заголовки)
def добавить_контакт(self, имя, телефон, email):
try:
with open(self.имя_файла, "a", encoding="utf-8", newline="") as файл:
writer = csv.writer(файл)
writer.writerow([имя, телефон, email])
print(f"Контакт '{имя}' добавлен")
except Exception as e:
print(f"Ошибка при добавлении контакта: {e}")
def показать_контакты(self):
try:
with open(self.имя_файла, "r", encoding="utf-8") as файл:
reader = csv.reader(файл)
контакты = list(reader)
if not контакты:
print("Контакты не найдены")
return
# Выводим заголовки
print(f"{контакты[0][0]:<15} {контакты[0][1]:<15} {контакты[0][2]}")
print("-" * 50)
# Выводим контакты
for контакт in контакты[1:]:
print(f"{контакт[0]:<15} {контакт[1]:<15} {контакт[2]}")
except Exception as e:
print(f"Ошибка при чтении контактов: {e}")
# Пример использования
контакты = Контакты()
# Добавляем несколько контактов
контакты.добавить_контакт("Анна", "+7(999)123-45-67", "anna@email.com")
контакты.добавить_контакт("Борис", "+7(999)765-43-21", "boris@email.com")
контакты.добавить_контакт("Виктория", "+7(999)555-55-55", "vika@email.com")
# Показываем все контакты
print("Список контактов:")
контакты.показать_контакты()
Задание 4:
import shutil
import datetime
import os
def создать_резервную_копию(исходный_файл):
try:
# Проверяем существование исходного файла
if not os.path.exists(исходный_файл):
print(f"Файл '{исходный_файл}' не найден!")
return
# Получаем имя файла без расширения и расширение
имя, расширение = os.path.splitext(исходный_файл)
# Создаем имя файла резервной копии с временной меткой
временная_метка = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
файл_резервной_копии = f"{имя}_backup_{временная_метка}{расширение}"
# Создаем резервную копию
shutil.copy2(исходный_файл, файл_резервной_копии)
print(f"Резервная копия создана: '{файл_резервной_копии}'")
return файл_резервной_копии
except Exception as e:
print(f"Ошибка при создании резервной копии: {e}")
return None
# Создаем тестовый файл
with open("тестовый_файл.txt", "w", encoding="utf-8") as файл:
файл.write("Это тестовый файл для резервного копирования.\n")
файл.write("Создан для демонстрации работы функции.\n")
# Создаем резервную копию
резервная_копия = создать_резервную_копию("тестовый_файл.txt")
# Проверяем содержимое резервной копии
if резервная_копия and os.path.exists(резервная_копия):
with open(резервная_копия, "r", encoding="utf-8") as файл:
print(f"\nСодержимое резервной копии '{резервная_копия}':")
print(файл.read())