You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写脚本检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:27:30