Ввод и вывод данных. Форматирование. Работа с файлами. [1.6 ]
Стандартный ввод и вывод
Взаимодействие программы с пользователем осуществляется через стандартный ввод и вывод. В Python для этих целей используются встроенные функции print() и input().
Функция print()
Функция print() выводит данные на экран. Она принимает неограниченное количество аргументов, которые по умолчанию разделяются пробелами:
print('Hello', 'world', '!')
# Hello world !
Параметры sep и end позволяют настроить разделитель между аргументами и символ в конце вывода:
print('apple', 'banana', 'cherry', sep=', ')
# apple, banana, cherry
print('Hello', end=' ')
print('world!')
# Hello world!
Для вывода элементов списка можно использовать оператор распаковки *:
numbers = [1, 2, 3, 4, 5]
print(*numbers, sep=' - ')
# 1 - 2 - 3 - 4 - 5
Функция input()
Функция input() считывает данные, введенные пользователем. Она всегда возвращает строку, поэтому для работы с числами требуется преобразование типов:
# Ввод строки
name = input('Введите ваше имя: ')
print(f'Привет, {name}!')
# Ввод числа
age = int(input('Введите ваш возраст: '))
print(f'Через 10 лет вам будет {age + 10}')
Работа с файлами
Для работы с файлами в Python используется функция open(), которая принимает путь к файлу и режим работы.
Режимы работы с файлами
| Режим | Описание |
|---|---|
r |
Чтение (режим по умолчанию) |
w |
Запись (создает новый файл или перезаписывает существующий) |
a |
Добавление (запись в конец файла) |
r+ |
Чтение и запись |
w+ |
Чтение и запись (создает новый файл или очищает существующий) |
a+ |
Чтение и добавление |
b |
Бинарный режим (используется с другими режимами) |
Чтение файлов
Основные методы для чтения файлов:
# Открытие файла с использованием менеджера контекста
with open('data.txt', 'r', encoding='utf-8') as file:
# Чтение всего содержимого
content = file.read()
print('Весь файл:')
print(content)
# Чтение построчно
file.seek(0) # Возврат в начало файла
print('\nПострочное чтение:')
for line in file:
print(line.strip())
# Чтение в список строк
file.seek(0)
lines = file.readlines()
print(f'\nКоличество строк: {len(lines)}')
Запись в файлы
Для записи данных в файл используются методы write() и writelines():
# Запись в файл
with open('output.txt', 'w', encoding='utf-8') as file:
file.write('Первая строка\n')
file.write('Вторая строка\n')
# Запись списка строк
lines = ['Третья строка\n', 'Четвертая строка\n']
file.writelines(lines)
# Добавление в конец файла
with open('output.txt', 'a', encoding='utf-8') as file:
file.write('Эта строка добавлена в конец\n')
Менеджер контекста
Использование конструкции with гарантирует автоматическое закрытие файла после завершения работы:
# Без менеджера контекста (требует явного закрытия)
file = open('example.txt', 'r')
try:
content = file.read()
print(content)
finally:
file.close()
# С менеджером контекста (рекомендуется)
with open('example.txt', 'r') as file:
content = file.read()
print(content)
# Файл автоматически закроется после выхода из блока
Форматирование строк
Python предоставляет несколько способов форматирования строк для включения в них переменных и значений.
Старый стиль (%-форматирование)
name = 'Анна'
age = 25
height = 1.68
print('Имя: %s, Возраст: %d лет, Рост: %.2f м' % (name, age, height))
# Имя: Анна, Возраст: 25 лет, Рост: 1.68 м
# Форматирование чисел
number = 12345.6789
print('Число: %10.2f' % number) # Число: 12345.68
print('Экспонента: %.3e' % number) # Экспонента: 1.235e+04
Метод format()
name = 'Михаил'
score = 95.5
# Позиционное форматирование
print('Студент {} получил {} баллов'.format(name, score))
# Именованное форматирование
print('Студент {name} получил {score:.1f} баллов'.format(name=name, score=score))
# Выравнивание и форматирование
print('{:10} | {:>8}'.format('Предмет', 'Оценка'))
print('{:10} | {:>8.1f}'.format('Математика', 4.5))
print('{:10} | {:>8.1f}'.format('Физика', 5.0))
F-строки (рекомендуется)
F-строки (форматированные строковые литералы) появились в Python 3.6 и являются наиболее современным и удобным способом форматирования:
name = 'Екатерина'
age = 30
salary = 150000.75
# Базовое использование
print(f'Имя: {name}, Возраст: {age}, Зарплата: {salary:,.2f} руб.')
# Имя: Екатерина, Возраст: 30, Зарплата: 150,000.75 руб.
# Выражения внутри f-строк
print(f'Через 5 лет {name} будет {age + 5} лет')
print(f'Ежемесячная зарплата: {salary / 12:.2f} руб.')
# Форматирование даты
from datetime import datetime
current_date = datetime.now()
print(f'Текущая дата: {current_date:%d.%m.%Y %H:%M}')
Практические примеры
Пример 1: Программа для ведения дневника
def add_entry():
"""Добавляет новую запись в дневник"""
entry = input('Введите вашу запись: ')
with open('diary.txt', 'a', encoding='utf-8') as file:
from datetime import datetime
timestamp = datetime.now().strftime('%d.%m.%Y %H:%M')
file.write(f'[{timestamp}] {entry}\n')
print('Запись успешно добавлена!')
def view_entries():
"""Показывает все записи из дневника"""
try:
with open('diary.txt', 'r', encoding='utf-8') as file:
entries = file.read()
if entries:
print('Ваши записи:')
print(entries)
else:
print('Дневник пуст')
except FileNotFoundError:
print('Дневник еще не создан')
# Основное меню программы
while True:
print('\n=== МЕНЮ ДНЕВНИКА ===')
print('1. Добавить запись')
print('2. Просмотреть записи')
print('3. Выход')
choice = input('Выберите действие: ')
if choice == '1':
add_entry()
elif choice == '2':
view_entries()
elif choice == '3':
print('До свидания!')
break
else:
print('Неверный выбор. Попробуйте еще раз')
Пример 2: Анализ лог-файла
def analyze_log_file(filename):
"""Анализирует лог-файл и выводит статистику"""
try:
with open(filename, 'r', encoding='utf-8') as file:
lines = file.readlines()
print(f'Всего строк в файле: {len(lines)}')
# Подсчет ошибок
error_count = 0
warning_count = 0
for line in lines:
if 'ERROR' in line:
error_count += 1
elif 'WARNING' in line:
warning_count += 1
print(f'Количество ошибок (ERROR): {error_count}')
print(f'Количество предупреждений (WARNING): {warning_count}')
# Вывод последних 5 строк
print('\nПоследние 5 строк:')
for line in lines[-5:]:
print(line.strip())
except FileNotFoundError:
print(f'Файл {filename} не найден')
except Exception as e:
print(f'Произошла ошибка: {e}')
# Использование функции
analyze_log_file('application.log')
Пример 3: Форматированный отчет
def generate_report(data):
"""Генерирует форматированный отчет из данных"""
print('=' * 60)
print(f'{"ОТЧЕТ О ПРОДАЖАХ":^60}')
print(f'{"за период: 01.01.2024 - 31.01.2024":^60}')
print('=' * 60)
# Заголовки таблицы
print(f'| {"Товар":20} | {"Количество":^10} | {"Сумма":>12} |')
print('-' * 60)
# Данные таблицы
total_amount = 0
for item in data:
name = item['name']
quantity = item['quantity']
price = item['price']
amount = quantity * price
total_amount += amount
print(f'| {name:20} | {quantity:^10} | {amount:>12,.2f} |')
# Итоговая строка
print('-' * 60)
print(f'| {"ИТОГО":20} | {"":^10} | {total_amount:>12,.2f} |')
print('=' * 60)
# Дополнительная информация
print(f'\n{"Примечание: Все суммы указаны в рублях.":^60}')
print(f'{"Отчет сформирован автоматически.":^60}')
# Данные для отчета
sales_data = [
{'name': 'Ноутбук', 'quantity': 15, 'price': 65000},
{'name': 'Смартфон', 'quantity': 32, 'price': 35000},
{'name': 'Наушники', 'quantity': 48, 'price': 5000},
{'name': 'Монитор', 'quantity': 22, 'price': 25000}
]
# Генерация отчета
generate_report(sales_data)
Рекомендации и лучшие практики
Работа с файлами
- Всегда используйте менеджер контекста
withдля работы с файлами - Указывайте кодировку при работе с текстовыми файлами:
encoding='utf-8' - Проверяйте существование файла перед чтением, если это необходимо
- Используйте относительные пути для файлов в проекте, абсолютные — только при необходимости
- Закрывайте файлы после использования, если не используете менеджер контекста
Форматирование строк
- Предпочитайте f-строки для нового кода — они наиболее читаемы и эффективны
- Используйте форматирование чисел для улучшения читаемости:
{value:,.2f} - Избегайте конкатенации строк с помощью
+в циклах — это неэффективно - Используйте именованные параметры в
format()для сложных шаблонов - Экранируйте специальные символы при необходимости:
{{и}}для вывода фигурных скобок
Ввод и вывод данных
- Валидируйте пользовательский ввод перед преобразованием типов
- Используйте понятные подсказки в функции
input() - Обрабатывайте исключения при работе с пользовательским вводом
- Используйте параметр
flush=Trueвprint()для немедленного вывода - Разделяйте логику и ввод/вывод для лучшей тестируемости кода
Заключение
В этом разделе мы рассмотрели основные аспекты работы с данными в Python:
- Стандартные функции ввода и вывода (
print()иinput()) - Работу с файлами: открытие, чтение, запись и закрытие
- Различные методы форматирования строк для представления данных
- Практические примеры применения этих концепций
Понимание этих механизмов позволяет создавать интерактивные программы, работающие с внешними данными и предоставляющие понятный вывод для пользователя. Эти навыки являются фундаментальными для любого Python-разработчика.
В следующих разделах мы углубимся в изучение более сложных структур данных и алгоритмов обработки информации.
Ссылки по теме
- Дополнительные операции с типами данных [1.4]
- Функции в Python: основные строительные блоки программ [1.5]
![Ввод и вывод данных. Форматирование. Работа с файлами. [1.6 ] Ввод и вывод данных. Форматирование. Работа с файлами. [1.6 ]](https://technobee.ru/media/zoo/images/line100_python_24f065d5f44b128d7987e916e0a668ad.png)