В Python работа с вводом-выводом (I/O) реализована просто и гибко. Рассмотрим основные аспекты.
1. Вывод данных
Функция print()
python
# Базовый вывод
print("Hello, World!")
# Вывод нескольких значений
print("Возраст:", 25, "лет")
# Разделитель (параметр sep)
print("яблоко", "банан", "апельсин", sep=", ") # яблоко, банан, апельсин
# Завершение строки (параметр end)
print("Загрузка", end="...")
print("готова") # Загрузка...готова
# Вывод в файл
with open("log.txt", "w") as f:
print("Сообщение в файл", file=f)
Форматированный вывод
python
name = "Анна"
age = 30
score = 95.5
# f-строки (Python 3.6+)
print(f"Имя: {name}, Возраст: {age}, Баллы: {score:.1f}")
# Метод format()
print("Имя: {}, Возраст: {}, Баллы: {:.1f}".format(name, age, score))
# %-форматирование (старый стиль)
print("Имя: %s, Возраст: %d, Баллы: %.1f" % (name, age, score))
2. Ввод данных
Функция input()
python
# Базовый ввод
name = input("Введите ваше имя: ")
print(f"Привет, {name}!")
# Преобразование типов
age = int(input("Сколько вам лет? ")) # Всегда возвращает строку
height = float(input("Ваш рост (в метрах): "))
# Обработка ошибок
try:
number = int(input("Введите число: "))
except ValueError:
print("Это не число!")
3. Работа с файлами
Открытие файлов
python
# Режимы открытия файла:
# 'r' - чтение (по умолчанию)
# 'w' - запись (создает новый или перезаписывает)
# 'a' - добавление в конец
# 'x' - создание, если файл не существует
# 'b' - бинарный режим
# 't' - текстовый режим (по умолчанию)
# '+' - чтение и запись
Чтение файлов
python
# Способ 1: with (рекомендуемый)
with open("file.txt", "r", encoding="utf-8") as file:
content = file.read() # читаем весь файл
print(content)
# Построчное чтение
with open("file.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip()) # strip() убирает символы переноса
# Чтение всех строк в список
with open("file.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
for line in lines:
print(line.strip())
# Чтение фиксированного количества символов
with open("file.txt", "r", encoding="utf-8") as file:
chunk = file.read(100) # читаем первые 100 символов
Запись в файлы
python
# Запись строки
with open("output.txt", "w", encoding="utf-8") as file:
file.write("Привет, мир!\n")
file.write("Вторая строка\n")
# Запись нескольких строк
lines = ["Строка 1\n", "Строка 2\n", "Строка 3\n"]
with open("output.txt", "w", encoding="utf-8") as file:
file.writelines(lines)
# Добавление в конец файла
with open("output.txt", "a", encoding="utf-8") as file:
file.write("Добавленная строка\n")
4. Работа с бинарными файлами
python
# Чтение бинарного файла
with open("image.jpg", "rb") as file:
data = file.read()
print(f"Размер файла: {len(data)} байт")
# Запись бинарных данных
binary_data = b'\x48\x65\x6c\x6c\x6f' # "Hello" в байтах
with open("binary.bin", "wb") as file:
file.write(binary_data)
5. Позиционирование в файле
python
with open("file.txt", "r+") as file:
# Получаем текущую позицию
position = file.tell()
print(f"Текущая позиция: {position}")
# Читаем 10 символов
content = file.read(10)
# Перемещаемся в начало файла
file.seek(0)
# Перемещаемся на 5 байт от текущей позиции
file.seek(5, 1) # 0 - начало, 1 - текущая, 2 - конец
# Перемещаемся в конец файла
file.seek(0, 2)
6. Работа с временными файлами
python
import tempfile
import os
# Создание временного файла
with tempfile.NamedTemporaryFile(mode='w', delete=False) as tmp:
tmp.write("Временные данные")
print(f"Временный файл: {tmp.name}")
# Файл автоматически удалится после закрытия (если delete=True)
with tempfile.TemporaryFile(mode='w+') as tmp:
tmp.write("Данные")
tmp.seek(0)
print(tmp.read())
7. Работа с путями файлов
python
import os
from pathlib import Path
# Старый способ (os.path)
file_path = os.path.join("folder", "subfolder", "file.txt")
dir_name = os.path.dirname(file_path)
base_name = os.path.basename(file_path)
abs_path = os.path.abspath(file_path)
# Новый способ (pathlib - Python 3.4+)
path = Path("folder/subfolder/file.txt")
print(path.name) # file.txt
print(path.stem) # file
print(path.suffix) # .txt
print(path.parent) # folder/subfolder
print(path.exists()) # Проверка существования
# Создание директорий
Path("new_folder/subfolder").mkdir(parents=True, exist_ok=True)
8. Практический пример: обработка CSV
python
import csv
# Запись CSV
data = [
["Имя", "Возраст", "Город"],
["Анна", 25, "Москва"],
["Иван", 30, "СПб"],
["Мария", 28, "Казань"]
]
with open("users.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerows(data)
# Чтение CSV
with open("users.csv", "r", encoding="utf-8") as file:
reader = csv.reader(file)
for row in reader:
print(row)
# Использование DictReader/DictWriter
with open("users.csv", "r", encoding="utf-8") as file:
reader = csv.DictReader(file)
for row in reader:
print(f"{row['Имя']} - {row['Возраст']} лет")
9. Обработка ошибок при работе с файлами
python
try:
with open("nonexistent.txt", "r") as file:
content = file.read()
except FileNotFoundError:
print("Файл не найден!")
except PermissionError:
print("Нет прав доступа!")
except IOError as e:
print(f"Ошибка ввода-вывода: {e}")
finally:
print("Блок finally выполняется всегда")
10. Кодировки
python
# Указание кодировки при работе с текстовыми файлами
with open("file.txt", "r", encoding="utf-8") as f:
content = f.read()
# Список доступных кодировок
import encodings
# print(encodings.aliases.aliases)
# Обработка ошибок кодировки
with open("file.txt", "r", encoding="utf-8", errors="ignore") as f:
content = f.read() # пропускает неправильные символы
Ключевые моменты
- Всегда используйте with для работы с файлами - он автоматически закрывает файл
- Указывайте кодировку (encoding="utf-8") для текстовых файлов
- Обрабатывайте исключения при работе с файлами
- Используйте pathlib для работы с путями в современном коде
- Не забывайте про .strip() при чтении строк для удаления символов переноса
Это основы работы с вводом-выводом в Python. Для более специфичных форматов (JSON, XML, Excel и т.д.) существуют специализированные библиотеки.