Initial commit: планирование эксперимента и оптимизация смесей

This commit is contained in:
2026-07-23 15:12:32 +05:00
commit 025421193d
17 changed files with 1634 additions and 0 deletions
+87
View File
@@ -0,0 +1,87 @@
# 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}")