图的加边去重

void add(int u, int v, int w, int c){
    int i;
    for(i = head[u]; i != -1; i = edge[i].next){
        node E = edge[i];
        if(v == E.v)
            break;
    }
    if(i != -1){//w 或 c具体看
        if(edge[i].cost > c)
            edge[i].cost = c, edge[i ^ 1].cost = -c;
        return ;
    }
    //加上图的正常加边
}

import os import math from datetime import datetime, date from openpyxl import load_workbook, Workbook from openpyxl.drawing.image import Image as OpenpyxlImage folder_path = r'D:\Class\能管比对\导出文件_月' folder_path2 = r'D:\Class\能管比对\导出文件合并' output_result = r'D:\Class\能管比对\每日结果\高变异列_CV大于0.3_整列分析.xlsx' os.makedirs(os.path.dirname(output_result), exist_ok=True) today = datetime.combine(date.today(), datetime.min.time()) # 今天的零点 processed_count = 0 for filename in os.listdir(folder_path): if not filename.endswith('.xlsx') or filename.startswith('~$'): continue src_file = os.path.join(folder_path, filename) dst_file = os.path.join(folder_path2, filename) try: wb = load_workbook(src_file) ws = wb.active # 提取所有行数据 data = [] for row in ws.iter_rows(values_only=True): data.append(list(row)) if len(data) <= 1: continue header = data[0] rows = data[1:] # 清洗第一列时间,并过滤未来时间 cleaned_rows = [header] # 保留表头 for row in rows: if not row or len(row) == 0: continue cell_val = row[0] try: if isinstance(cell_val, datetime): dt = cell_val elif isinstance(cell_val, str): dt = datetime.fromisoformat(cell_val.replace('/', '-')) else: continue # 无法解析跳过 if dt >= today: continue # 过滤未来时间 except: continue # 时间解析失败跳过 cleaned_rows.append(row) # 写出清洗后文件 new_wb = Workbook() new_ws = new_wb.active for r in cleaned_rows: new_ws.append(r) new_wb.save(dst_file) processed_count += 1 except Exception as e: print(f"⚠️ 处理 {filename} 时出错:{e}") print(f"✅ 共处理了 {processed_count} 个文件") results = [] # 存储高变异列信息 image_sources = [] # 记录每个高变异列对应的 png 文件来源 for filename in os.listdir(folder_path2): if not filename.endswith('.xlsx') or filename.startswith('~$'): continue file_path = os.path.join(folder_path2, filename) filename_no_ext = os.path.splitext(filename)[0] png_filename = f"{filename_no_ext}.png" png_path = os.path.join(folder_path, png_filename) # 假设 PNG 和 XLSX 在同一原始目录下 try: wb = load_workbook(file_path) ws = wb.active data = [] for row in ws.iter_rows(values_only=True): data.append(list(row)) if len(data) < 2: continue header = data[0] rows = data[1:] # 构建每列的数据列表 columns_data = [[] for _ in header] for row in rows: for i, val in enumerate(row): if i >= len(columns_data): continue try: num = float(val) columns_data[i].append(num) except (TypeError, ValueError): continue # 分析第2列开始(索引1起) for idx, col_name in enumerate(header[1:], start=1): raw_data = columns_data[idx] n = len(raw_data) if n < 2: continue mean_val = sum(raw_data) / n variance = sum((x - mean_val) ** 2 for x in raw_data) / n # 总体方差 std_val = math.sqrt(variance) if abs(mean_val) > 1e-8: cv = std_val / mean_val if cv > 0.3: results.append({ '来源文件': filename_no_ext, '列名': col_name, '有效数据点数': n, '均值': round(mean_val, 6), '标准差': round(std_val, 6), '变异系数(CV)': round(cv, 6) }) image_sources.append({ 'source_file': filename, # 来源 .xlsx 文件名 'png_path': png_path, # 对应的 .png 路径 'exists': os.path.exists(png_path) # 是否存在该 }) except Exception as e: print(f"⚠️ 分析 {filename} 时出错:{e}") if results: result_wb = Workbook() # =============== Sheet1: 高变异列数据 =============== sheet1 = result_wb.active sheet1.title = "高变异列数据" sheet1.append(list(results[0].keys())) for r in results: sheet1.append(list(r.values())) # =============== Sheet2: 对应表展示 =============== sheet2 = result_wb.create_sheet("对应表展示") sheet2.cell(row=1, column=1, value="来源文件") sheet2.cell(row=1, column=2, value="像状态") current_row = 2 inserted_images_count = 0 seen_files = set() # 避免复插入同一个文件的片 for item in image_sources: source_file = item['source_file'] png_path = item['png_path'] # 避免复插入相同文件的片(按文件) if source_file in seen_files: continue seen_files.add(source_file) if item['exists']: try: img = OpenpyxlImage(png_path) img.width = img.width * 0.5 # 可选缩放 img.height = img.height * 0.5 # 插入片到指定位置 sheet2.add_image(img, f'B{current_row}') sheet2.cell(row=current_row, column=2, value="✅ 像已插入") inserted_images_count += 1 except Exception as e: sheet2.cell(row=current_row, column=2, value=f"❌ 载失败: {e}") else: sheet2.cell(row=current_row, column=2, value="❌ 像未找到") current_row += int(img.height // 15) + 2 # 留出足够垂直空间给片(粗略估算) # 调整列宽 sheet2.column_dimensions['A'].width = 20 sheet2.column_dimensions['B'].width = 80 result_wb.save(output_result) print(f"\n✅ 分析完成!共 {len(results)} 个高变异列已保存至:\n {output_result}") print(f"📊 共尝试插入 {len(seen_files)} 张像,成功插入 {inserted_images_count} 张。") else: print("\n🟡 未发现变异系数大于 0.3 的列。") ——因为前置代码的需求原因,folder_path中只有xlsx文件,其对应的png片都在folder_path2中。所有这代码整体逻辑应该是先对folder_path中的文件进行清洗,放到folder_path2之后,xlsx文件与其png都具备了,再进行变异函数计算以及插
最新发布
11-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值