如何编写脚本检查CSV中应用对应的XML文件是否存在并输出结果
Python脚本完成CSV解析与XML存在性检查方案
你已经完成了解压功能,以下是补充步骤2和3的完整实现,整合后的脚本可以完成全部需求:
完整代码
from tkinter import Tk from tkinter.filedialog import askdirectory import zipfile import os import pandas as pd from datetime import datetime def unzipXML(root): print(f'({datetime.now().strftime("%b. %d - %H:%M:%S")}) Stage 1 of 5: Unzipping folder(s)...') # 获取所有.zip文件路径 zipPaths = [] for filename in os.listdir(root): if filename.endswith(".zip"): zipPaths.append(os.path.join(root, filename)) # 批量解压 for path in zipPaths: with zipfile.ZipFile(path, 'r') as zipRef: zipRef.extractall(root) print(f'({datetime.now().strftime("%b. %d - %H:%M:%S")}) {len(zipPaths)} folder(s) unzipped successfully.') def check_xml_existence(root): print(f'({datetime.now().strftime("%b. %d - %H:%M:%S")}) Stage 2 of 5: Locating CSV file...') # 查找目录下的CSV文件(默认取第一个,多文件场景可扩展) csv_path = None for filename in os.listdir(root): if filename.endswith(".csv"): csv_path = os.path.join(root, filename) break if not csv_path: print("Error: 未找到目标CSV文件") return print(f'({datetime.now().strftime("%b. %d - %H:%M:%S")}) Stage 3 of 5: Reading CSV data...') df = pd.read_csv(csv_path) # 替换为你CSV中实际的应用编号列名 app_id_column = "XXXXXX" if app_id_column not in df.columns: print(f"Error: CSV中不存在'{app_id_column}'列") return print(f'({datetime.now().strftime("%b. %d - %H:%M:%S")}) Stage 4 of 5: Checking XML existence...') # 收集所有XML文件的编号(去除.xml后缀) existing_xml_ids = set() for filename in os.listdir(root): if filename.endswith(".xml"): xml_id = os.path.splitext(filename)[0] existing_xml_ids.add(xml_id) # 添加存在性标记列 df["XML文件是否存在"] = df[app_id_column].apply(lambda x: "是" if str(x) in existing_xml_ids else "否") print(f'({datetime.now().strftime("%b. %d - %H:%M:%S")}) Stage 5 of 5: Saving output CSV...') # 生成带检查结果的输出文件名 output_path = os.path.splitext(csv_path)[0] + "_检查结果.csv" df.to_csv(output_path, index=False, encoding="utf-8-sig") print(f"Success: 结果已保存至 {output_path}") if __name__ == "__main__": # 弹出对话框选择目标目录 root = Tk() root.withdraw() target_dir = askdirectory(title="选择包含压缩包的目录") if not target_dir: print("未选择目录,程序退出") exit() # 执行解压与检查流程 unzipXML(target_dir) check_xml_existence(target_dir)
关键说明
- CSV列名适配:将代码中的
app_id_column = "XXXXXX"替换为你CSV中实际的应用编号列名 - XML命名规则适配:如果XML文件名不是直接对应应用编号(比如带前缀
app_XXXXXX.xml),需要修改xml_id的提取逻辑,例如xml_id = os.path.splitext(filename)[0].replace("app_", "") - 多CSV场景:如果目录下有多个CSV文件,可扩展逻辑让用户选择目标文件,或遍历所有CSV处理
- 编码处理:输出CSV使用
utf-8-sig编码,避免Windows下中文乱码问题
内容的提问来源于stack exchange,提问作者Koomos
相关产品推荐
相关产品推荐

