# LST数据处理插件系统

本插件系统允许用户为自定义数据格式开发数据处理插件。插件处理的结果将被合并到主数据文件中。

## 插件系统概述

LST数据处理插件系统提供了一种灵活的方式来扩展数据处理功能,无需修改主程序代码。用户可以开发处理特定数据格式的插件,系统会自动加载并执行这些插件,并将处理结果合并到最终的数据文件中。

## 开发新插件

要创建新的数据处理插件,需要:

1. 在 `plugins` 目录下创建新的 Python 文件
2. 导入并继承 `CustomDataProcessorPlugin` 基类
3. 实现所有必需的方法

### 插件接口

每个插件必须实现以下方法:

```python
def can_handle(self, zip_path: Path, folder_name: str) -> bool:
    """判断插件是否可以处理指定文件夹中的数据"""
    pass

def process_data(self, zip_path: Path, folder_name: str, output_dir: Path) -> Optional[pd.DataFrame]:
    """处理数据并返回处理后的DataFrame"""
    pass

def get_required_columns(self) -> Dict[str, Any]:
    """返回插件将提供的列及其数据类型"""
    pass
```
以下是一个处理自定义数据的示例插件:
‘’‘
from pathlib import Path
from typing import Dict, Any, Optional
import pandas as pd
from plugins.plugin_interface import CustomDataProcessorPlugin

class MyCustomDataProcessor(CustomDataProcessorPlugin):
    def can_handle(self, zip_path: Path, folder_name: str) -> bool:
        """判断插件是否可以处理指定文件夹中的数据"""
        return folder_name.startswith('my_custom_data_')
        
    def get_required_columns(self) -> Dict[str, Any]:
        """返回插件将提供的列及其数据类型"""
        return {
            'simTime': float,      # 必需
            'simFrame': int,       # 必需
            'playerId': int,       # 必需
            'customField1': str,   # 自定义字段
            'customField2': float  # 自定义字段
        }
        
    def process_data(self, zip_path: Path, folder_name: str, output_dir: Path) -> Optional[pd.DataFrame]:
        """处理数据并返回处理后的DataFrame"""
        try:
            # 1. 从zip中提取数据
            # 2. 处理数据
            # 3. 创建包含必需列的DataFrame
            df = pd.DataFrame({
                'simTime': [...],
                'simFrame': [...],
                'playerId': [...],
                'customField1': [...],
                'customField2': [...]
            })
            return df
        except Exception as e:
            print(f"处理数据时出错: {e}")
            return None

‘’‘