Files

88 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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}")