# core/table_io.py """ Модуль для работы с таблицами: вывод, сохранение в CSV, копирование в буфер обмена. """ import os import csv from table import print_table try: import pyperclip HAS_PYPERCLIP = True except ImportError: HAS_PYPERCLIP = False def handle_table_output(headers, rows, title="Таблица", ask_each_time=True): """ Выводит таблицу, затем предлагает сохранить в CSV или скопировать в буфер обмена. headers – список заголовков rows – список строк title – заголовок ask_each_time – если False, только выводит таблицу без дополнительных вопросов. """ if title: print(f"\n=== {title} ===") print_table(headers, rows) if not ask_each_time: return while True: print("\nДействия с таблицей:") print(" 1. Сохранить в CSV") if HAS_PYPERCLIP: print(" 2. Скопировать в буфер обмена") else: print(" 2. Скопировать в буфер обмена (недоступно, установите pyperclip)") print(" Enter - пропустить") choice = input("Выберите действие: ").strip() if choice == "": break if choice == "1": save_to_csv(headers, rows) break elif choice == "2": if HAS_PYPERCLIP: copy_to_clipboard(headers, rows) break else: print("pyperclip не установлен. Установите командой: pip install pyperclip") continue else: print("Неверный выбор. Введите 1, 2 или Enter.") def save_to_csv(headers, rows, default_filename="table.csv"): """Сохраняет таблицу в CSV-файл.""" filename = input(f"Имя файла (по умолчанию {default_filename}): ").strip() if not filename: filename = default_filename if not filename.lower().endswith('.csv'): filename += '.csv' try: with open(filename, 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f, delimiter=';') writer.writerow(headers) writer.writerows(rows) print(f"Таблица сохранена в {os.path.abspath(filename)}") except Exception as e: print(f"Ошибка при сохранении: {e}") def copy_to_clipboard(headers, rows): """Копирует таблицу в буфер обмена в формате TSV.""" if not HAS_PYPERCLIP: print("pyperclip не установлен. Установите командой: pip install pyperclip") return lines = [] lines.append("\t".join(str(h) for h in headers)) for row in rows: lines.append("\t".join(str(cell) for cell in row)) text = "\n".join(lines) try: pyperclip.copy(text) print("Таблица скопирована в буфер обмена (TSV-формат).") print("Вставьте её в Excel или другой редактор.") except Exception as e: print(f"Ошибка копирования в буфер обмена: {e}")