""" 数据迁移脚本 Data Migration Script 用于将现有的三个项目文件夹中的数据和模型文件复制到新的集成项目结构中 """ import os import shutil import logging from pathlib import Path def setup_logging(): """设置日志""" logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('setup_data.log', encoding='utf-8'), logging.StreamHandler() ] ) def copy_file_safe(src, dst): """ 安全复制文件 @param src: 源文件路径 @param dst: 目标文件路径 """ try: # 确保目标目录存在 os.makedirs(os.path.dirname(dst), exist_ok=True) if os.path.exists(src): shutil.copy2(src, dst) logging.info(f"复制成功: {src} -> {dst}") return True else: logging.warning(f"源文件不存在: {src}") return False except Exception as e: logging.error(f"复制失败: {src} -> {dst}, 错误: {str(e)}") return False def setup_crop_cd_model(): """设置作物Cd模型文件""" logging.info("=" * 50) logging.info("设置作物Cd模型文件...") # 源目录 src_dir = "../作物Cd模型文件与数据/作物Cd模型文件与数据" # 目标目录 model_files_dir = "models/crop_cd_model/model_files" data_dir = "models/crop_cd_model/data" # 复制模型文件 model_files = [ "cropCdNN.pth", "cropCd_mean.npy", "cropCd_scale.npy", "constrained_nn6.py" ] for file in model_files: src = os.path.join(src_dir, file) dst = os.path.join(model_files_dir, file) copy_file_safe(src, dst) # 复制数据文件 data_files = [ "areatest.csv" ] for file in data_files: src = os.path.join(src_dir, file) dst = os.path.join(data_dir, file) copy_file_safe(src, dst) # 复制坐标文件到共享数据目录 coord_src = os.path.join(src_dir, "坐标.csv") coord_dst = "data/coordinates/坐标.csv" copy_file_safe(coord_src, coord_dst) def setup_effective_cd_model(): """设置有效态Cd模型文件""" logging.info("=" * 50) logging.info("设置有效态Cd模型文件...") # 源目录 src_dir = "../有效态Cd模型文件与数据/有效态Cd模型文件与数据" # 目标目录 model_files_dir = "models/effective_cd_model/model_files" data_dir = "models/effective_cd_model/data" # 复制模型文件 model_files = [ "EffCdNN6C.pth", "EffCd_mean.npy", "EffCd_scale.npy", "constrained_nn6C.py" ] for file in model_files: src = os.path.join(src_dir, file) dst = os.path.join(model_files_dir, file) copy_file_safe(src, dst) # 复制数据文件 data_files = [ "areatest.csv" ] for file in data_files: src = os.path.join(src_dir, file) dst = os.path.join(data_dir, file) copy_file_safe(src, dst) def setup_irrigation_water_files(): """设置灌溉水项目文件""" logging.info("=" * 50) logging.info("设置灌溉水项目文件...") # 源目录 src_dir = "../Irrigation_Water/Irrigation_Water" # 复制栅格文件 raster_files = [ "Raster/meanTemp.tif", "Raster/lechang.shp", "Raster/lechang.shx", "Raster/lechang.dbf", "Raster/lechang.prj" ] for file in raster_files: src = os.path.join(src_dir, file) dst = os.path.join("output/raster", os.path.basename(file)) copy_file_safe(src, dst) # 复制示例数据文件 data_files = [ "Data/Final_predictions.csv" ] for file in data_files: src = os.path.join(src_dir, file) dst = os.path.join("data/final", os.path.basename(file)) copy_file_safe(src, dst) def create_directory_structure(): """创建目录结构""" logging.info("=" * 50) logging.info("创建目录结构...") directories = [ "models/crop_cd_model/model_files", "models/crop_cd_model/data", "models/effective_cd_model/model_files", "models/effective_cd_model/data", "data/coordinates", "data/predictions", "data/final", "output/raster", "output/figures", "output/reports", "analysis", "utils" ] for directory in directories: os.makedirs(directory, exist_ok=True) logging.info(f"创建目录: {directory}") def create_requirements_txt(): """创建requirements.txt文件""" logging.info("=" * 50) logging.info("创建requirements.txt文件...") requirements = """# Cd预测集成系统依赖包 numpy>=1.21.0 pandas>=1.3.0 torch>=1.9.0 scikit-learn>=1.0.0 geopandas>=0.10.0 rasterio>=1.2.0 matplotlib>=3.4.0 seaborn>=0.11.0 shapely>=1.7.0 """ with open("requirements.txt", "w", encoding="utf-8") as f: f.write(requirements) logging.info("requirements.txt 创建完成") def main(): """主函数""" setup_logging() logging.info("开始设置Cd预测集成系统...") logging.info("=" * 60) try: # 创建目录结构 create_directory_structure() # 设置各个模型的文件 setup_crop_cd_model() setup_effective_cd_model() setup_irrigation_water_files() # 创建requirements.txt create_requirements_txt() logging.info("=" * 60) logging.info("🎉 Cd预测集成系统设置完成!") logging.info("=" * 60) print("\n" + "=" * 60) print("🎉 数据迁移完成!") print("=" * 60) print("下一步操作:") print("1. 安装依赖包:pip install -r requirements.txt") print("2. 运行主程序:python main.py") print("3. 查看输出结果在 output/ 目录中") print("=" * 60) except Exception as e: logging.error(f"设置过程中发生错误: {str(e)}") raise if __name__ == "__main__": main()