Spaces:
Running
Running
import hashlib | |
import pandas as pd | |
import json | |
import logging | |
logger = logging.getLogger(__name__) | |
def generate_data_hash(data, key_columns=None): | |
""" | |
Генерація хешу для даних. | |
Args: | |
data: DataFrame або словник з даними | |
key_columns (list, optional): Список ключових колонок для хешування | |
Returns: | |
str: Хеш даних | |
""" | |
try: | |
if isinstance(data, pd.DataFrame): | |
# Якщо передано DataFrame | |
if key_columns: | |
# Фільтруємо тільки наявні колонки | |
available_columns = [col for col in key_columns if col in data.columns] | |
if not available_columns: | |
# Якщо немає жодної ключової колонки, використовуємо всі дані | |
data_str = data.to_json(orient='records') | |
else: | |
# Інакше використовуємо тільки ключові колонки | |
data_str = data[available_columns].to_json(orient='records') | |
else: | |
# Якщо не вказано ключові колонки, використовуємо всі дані | |
data_str = data.to_json(orient='records') | |
elif isinstance(data, dict): | |
# Якщо передано словник | |
data_str = json.dumps(data, sort_keys=True) | |
else: | |
# Інакше конвертуємо в рядок | |
data_str = str(data) | |
# Створюємо хеш | |
hash_object = hashlib.sha256(data_str.encode()) | |
data_hash = hash_object.hexdigest() | |
return data_hash | |
except Exception as e: | |
logger.error(f"Помилка при генерації хешу даних: {e}") | |
# У випадку помилки повертаємо None | |
return None |