Работа с файлами - важная часть программирования. Python предоставляет удобные средства для чтения и записи файлов различного формата.
Для работы с файлами используется функция open(). Важно всегда закрывать файлы после использования:
# Открытие файла для чтения
файл = open("пример.txt", "r", encoding="utf-8")
# ... работа с файлом ...
файл.close() # Важно закрыть файл!
# Более безопасный способ - использование with
with open("пример.txt", "r", encoding="utf-8") as файл:
# ... работа с файлом ...
содержимое = файл.read()
# Файл автоматически закрывается после выхода из блока with
# Режимы открытия файлов:
# "r" - чтение (по умолчанию)
# "w" - запись (создает новый файл или перезаписывает существующий)
# "a" - добавление (добавляет в конец файла)
# "r+" - чтение и запись
# "b" - бинарный режим (например, "rb", "wb")
Метод read() позволяет прочитать весь файл целиком:
# Создадим пример файла для демонстрации
with open("пример.txt", "w", encoding="utf-8") as файл:
файл.write("Привет, мир!\n")
файл.write("Это вторая строка.\n")
файл.write("А это третья строка.\n")
# Чтение всего содержимого файла
with open("пример.txt", "r", encoding="utf-8") as файл:
содержимое = файл.read()
print("Все содержимое файла:")
print(содержимое)
# Чтение определенного количества символов
with open("пример.txt", "r", encoding="utf-8") as файл:
часть = файл.read(10) # Первые 10 символов
print(f"Первые 10 символов: '{часть}'")
Для работы с большими файлами удобно читать их построчно:
# Метод readline() - чтение одной строки
with open("пример.txt", "r", encoding="utf-8") as файл:
первая_строка = файл.readline()
вторая_строка = файл.readline()
print(f"Первая строка: {первая_строка.strip()}")
print(f"Вторая строка: {вторая_строка.strip()}")
# Метод readlines() - чтение всех строк в список
with open("пример.txt", "r", encoding="utf-8") as файл:
строки = файл.readlines()
print("Все строки в списке:")
for i, строка in enumerate(строки, 1):
print(f"{i}: {строка.strip()}")
# Итерация по файлу (самый эффективный способ)
with open("пример.txt", "r", encoding="utf-8") as файл:
print("Итерация по строкам:")
for номер, строка in enumerate(файл, 1):
print(f"{номер}: {строка.strip()}")
Python позволяет работать с файлами различных форматов:
# Создание примера CSV файла
with open("данные.csv", "w", encoding="utf-8") as файл:
файл.write("Имя,Возраст,Город\n")
файл.write("Анна,25,Москва\n")
файл.write("Борис,30,Санкт-Петербург\n")
файл.write("Виктория,22,Казань\n")
# Чтение CSV файла
with open("данные.csv", "r", encoding="utf-8") as файл:
# Пропускаем заголовок
заголовок = файл.readline().strip()
print(f"Заголовок: {заголовок}")
# Читаем данные
for строка in файл:
данные = строка.strip().split(",")
имя, возраст, город = данные
print(f"{имя} ({возраст} лет) из {город}")
import json
# Создание примера JSON файла
данные = {
"студенты": [
{"имя": "Анна", "возраст": 25, "курс": "Информатика"},
{"имя": "Борис", "возраст": 30, "курс": "Математика"},
{"имя": "Виктория", "возраст": 22, "курс": "Физика"}
]
}
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 файла:")
for студент in данные["студенты"]:
print(f"- {студент['имя']}, {студент['возраст']} лет, {студент['курс']}")
Важно обрабатывать возможные ошибки при работе с файлами:
# Обработка FileNotFoundError
try:
with open("несуществующий_файл.txt", "r", encoding="utf-8") as файл:
содержимое = файл.read()
print(содержимое)
except FileNotFoundError:
print("Файл не найден!")
# Обработка UnicodeDecodeError
try:
with open("пример.txt", "r", encoding="ascii") as файл:
содержимое = файл.read()
print(содержимое)
except UnicodeDecodeError:
print("Ошибка кодировки файла!")
# Общая обработка ошибок
try:
with open("пример.txt", "r", encoding="utf-8") as файл:
содержимое = файл.read()
print(содержимое)
except FileNotFoundError:
print("Файл не найден!")
except PermissionError:
print("Нет прав доступа к файлу!")
except Exception as e:
print(f"Произошла ошибка: {e}")
Рассмотрим несколько практических примеров работы с файлами:
# Создание текстового файла для анализа
with open("текст.txt", "w", encoding="utf-8") as файл:
файл.write("Python - это мощный язык программирования.\n")
файл.write("Он используется для веб-разработки, анализа данных и машинного обучения.\n")
файл.write("Python имеет простой и понятный синтаксис.\n")
файл.write("Многие компании выбирают Python для своих проектов.\n")
# Анализ текста
def анализ_текста(имя_файла):
try:
with open(имя_файла, "r", encoding="utf-8") as файл:
строки = файл.readlines()
# Подсчет статистики
количество_строк = len(строки)
количество_символов = sum(len(строка) for строка in строки)
количество_слов = sum(len(строка.split()) for строка in строки)
print(f"Статистика файла '{имя_файла}':")
print(f"- Строк: {количество_строк}")
print(f"- Слов: {количество_слов}")
print(f"- Символов: {количество_символов}")
# Поиск самых длинных строк
максимальная_длина = max(len(строка.strip()) for строка in строки)
длинные_строки = [строка.strip() for строка in строки if len(строка.strip()) == максимальная_длина]
print(f"\nСамые длинные строки ({максимальная_длина} символов):")
for строка in длинные_строки:
print(f"- {строка}")
except FileNotFoundError:
print(f"Файл '{имя_файла}' не найден!")
# Вызов функции анализа
анализ_текста("текст.txt")
Задание 1:
# Создание файла с данными о студентах
with open("студенты.txt", "w", encoding="utf-8") as файл:
файл.write("Анна 25 Информатика\n")
файл.write("Борис 30 Математика\n")
файл.write("Виктория 22 Физика\n")
# Чтение и вывод данных
def вывести_студентов(имя_файла):
try:
with open(имя_файла, "r", encoding="utf-8") as файл:
print("Список студентов:")
for строка in файл:
данные = строка.strip().split()
if len(данные) == 3:
имя, возраст, курс = данные
print(f"- {имя}, {возраст} лет, {курс}")
except FileNotFoundError:
print("Файл не найден!")
вывести_студентов("студенты.txt")
Задание 2:
def частота_слов(имя_файла):
частота = {}
try:
with open(имя_файла, "r", encoding="utf-8") as файл:
for строка in файл:
слова = строка.strip().lower().split()
for слово in слова:
# Удаляем знаки препинания
слово = ''.join(символ for символ in слово if символ.isalnum())
if слово:
частота[слово] = частота.get(слово, 0) + 1
# Сортировка по частоте
отсортированные = sorted(частота.items(), key=lambda x: x[1], reverse=True)
return отсортированные
except FileNotFoundError:
print("Файл не найден!")
return []
# Тестирование
with open("тест.txt", "w", encoding="utf-8") as файл:
файл.write("Python это мощный язык программирования Python используется везде\n")
файл.write("Python имеет простой синтаксис язык программирования должен быть простым\n")
результат = частота_слов("тест.txt")
print("Частота слов:")
for слово, количество in результат[:5]: # Первые 5 слов
print(f"{слово}: {количество}")
Задание 3:
import os
def поиск_слова_в_файлах(директория, слово):
результаты = []
try:
for имя_файла in os.listdir(директория):
путь_к_файлу = os.path.join(директория, имя_файла)
# Проверяем, что это файл (не директория)
if os.path.isfile(путь_к_файлу):
try:
with open(путь_к_файлу, "r", encoding="utf-8") as файл:
for номер_строки, строка in enumerate(файл, 1):
if слово.lower() in строка.lower():
результаты.append((имя_файла, номер_строки, строка.strip()))
except UnicodeDecodeError:
# Пропускаем файлы, которые не могут быть прочитаны как текст
pass
except PermissionError:
# Пропускаем файлы, к которым нет доступа
pass
return результаты
except FileNotFoundError:
print(f"Директория '{директория}' не найдена!")
return []
# Пример использования (раскомментируйте для тестирования)
# результаты = поиск_слова_в_файлах(".", "Python")
# for файл, строка, содержимое in результаты:
# print(f"{файл}:{строка} - {содержимое}")
Задание 4:
def анализ_лога(имя_файла):
ошибки = 0
предупреждения = 0
try:
with open(имя_файла, "r", encoding="utf-8") as файл:
for строка in файл:
if "ERROR" in строка:
ошибки += 1
elif "WARNING" in строка:
предупреждения += 1
print(f"Анализ лог-файла '{имя_файла}':")
print(f"- Ошибок (ERROR): {ошибки}")
print(f"- Предупреждений (WARNING): {предупреждения}")
print(f"- Всего проблем: {ошибки + предупреждения}")
except FileNotFoundError:
print(f"Лог-файл '{имя_файла}' не найден!")
# Создание примера лог-файла
with open("лог.txt", "w", encoding="utf-8") as файл:
файл.write("2023-01-01 INFO Приложение запущено\n")
файл.write("2023-01-01 WARNING Низкий уровень памяти\n")
файл.write("2023-01-01 ERROR Не удалось подключиться к базе данных\n")
файл.write("2023-01-01 INFO Пользователь вошел в систему\n")
файл.write("2023-01-01 ERROR Ошибка доступа к файлу\n")
файл.write("2023-01-01 WARNING Низкий уровень дискового пространства\n")
# Анализ лог-файла
анализ_лога("лог.txt")