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

如何在for循环外部使用循环生成的DataFrame进行文件对比?

解决GCS存储桶文件名与Excel列表对比缺失值的问题

原代码的核心问题

你当前的循环里每次都会创建新的pd.DataFrame覆盖blob_list,导致循环结束后blob_list仅保留最后一个遍历到的文件名,无法实现批量对比。

修正步骤与完整代码

1. 正确收集GCS存储桶中的所有文件名

先初始化空列表存储所有文件名,遍历桶内文件时将文件名追加到列表,最后统一转为DataFrame:

# 初始化空列表存储所有GCS文件名
blob_names = []
for folderName in bucketFolder:
    blob_path = storage_client.list_blobs(bucketName, prefix=folderName)
    for blob in blob_path:
        # 提取文件名(去掉路径部分)
        filename = str(blob.name).rsplit("/", 1)[-1]
        blob_names.append(filename)

# 转换为DataFrame,指定列名方便后续对比
blob_list = pd.DataFrame(blob_names, columns=['Blob_Filename'])

2. 读取Excel中的文件名列表

这部分代码可以保留,建议统一列名风格:

spreadsheet_filenames = pd.read_excel(spreadsheetFile, usecols=['Filename'])
# 可选:统一列名,避免后续混淆
spreadsheet_filenames = spreadsheet_filenames.rename(columns={'Filename': 'Excel_Filename'})

3. 对比两者的缺失值

找出GCS中有但Excel中没有的文件

# 标记GCS文件是否在Excel中存在
blob_list['Exists_in_Excel'] = blob_list['Blob_Filename'].isin(spreadsheet_filenames['Excel_Filename'])
# 提取缺失的文件
gcs_missing_in_excel = blob_list[~blob_list['Exists_in_Excel']]

找出Excel中有但GCS中没有的文件

# 标记Excel文件是否在GCS中存在
spreadsheet_filenames['Exists_in_GCS'] = spreadsheet_filenames['Excel_Filename'].isin(blob_list['Blob_Filename'])
# 提取缺失的文件
excel_missing_in_gcs = spreadsheet_filenames[~spreadsheet_filenames['Exists_in_GCS']]

(可选)模糊匹配场景

如果需要判断GCS文件名是否包含在Excel文件名中(而非完全匹配),可以保留你原有的逻辑并调整为批量处理:

# 标记GCS文件名是否在任意Excel文件名中出现
blob_list['Exists_in_Excel'] = blob_list['Blob_Filename'].apply(
    lambda s1: spreadsheet_filenames['Excel_Filename'].str.contains(s1).any()
)

注意事项

  • 若存在大小写、空格、文件后缀差异,建议先统一处理(比如转小写、去除首尾空格、统一后缀格式)
  • 文件数量较多时,isin比逐行apply的效率更高,优先使用前者做完全匹配

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:52:48