Перейти к содержимому

Ввод и вывод данных. Форматирование. Работа с файлами. [1.6 ]

Ввод и вывод данных. Форматирование. Работа с файлами. [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-разработчика.

В следующих разделах мы углубимся в изучение более сложных структур данных и алгоритмов обработки информации.

Ссылки по теме

Конспект:
Пятница, 05 декабря 2025
Ввод и вывод данных. Форматирование. Работа с файлами. [1.6 ]