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

将DataFrame中部分文件名匹配至完整文件名并复制文件

没问题,我来帮你搞定这个需求——把DataFrame里的前缀匹配到完整文件名,再复制到新路径。下面是一步步的实现方案和代码示例:

实现步骤与代码

1. 先获取所有完整文件名并建立前缀映射

首先我们需要遍历源文件目录,把所有符合id_year_month_day#hour_min_sec.csv格式的文件找出来,然后建立「前缀(比如1001_2017_01_02)」到「完整文件路径」的映射关系,这样后续匹配起来更高效。

import pandas as pd
import glob
import os
import shutil

# 替换成你的源文件目录
source_dir = "/your/source/files/directory"
# 获取所有符合格式的csv文件
full_file_paths = glob.glob(os.path.join(source_dir, "*.csv"))

# 构建前缀到完整文件路径的字典
prefix_full_map = {}
for file_path in full_file_paths:
    # 提取文件名(不带路径)
    filename = os.path.basename(file_path)
    # 分割出#之前的前缀部分
    prefix = filename.split("#")[0]
    # 如果有多个文件对应同一个前缀,这里会保留最后一个,若要保留所有可改成列表存储
    prefix_full_map[prefix] = file_path

2. 把DataFrame中的前缀匹配到完整文件路径

假设你的DataFrame名为prefix_df,其中存储前缀的列叫prefix,我们可以用map快速完成匹配,同时过滤掉匹配失败的行(比如前缀找不到对应文件的情况)。

# 给原DataFrame添加完整文件路径列
prefix_df["full_file_path"] = prefix_df["prefix"].map(prefix_full_map)

# 过滤掉匹配失败的行(full_file_path为NaN的行)
matched_df = prefix_df.dropna(subset=["full_file_path"]).reset_index(drop=True)

3. 复制匹配到的文件到新路径

最后一步就是把匹配到的文件复制到目标目录,我们会先确保目标目录存在,再逐个复制,同时处理可能的异常情况。

# 替换成你的目标目录
target_dir = "/your/target/files/directory"
# 确保目标目录存在,不存在则创建
os.makedirs(target_dir, exist_ok=True)

# 遍历匹配结果,复制文件
for _, row in matched_df.iterrows():
    source_path = row["full_file_path"]
    target_filename = os.path.basename(source_path)
    target_path = os.path.join(target_dir, target_filename)
    
    try:
        # copy2会保留文件元数据,比copy更合适
        shutil.copy2(source_path, target_path)
        print(f"✅ 成功复制: {source_path} → {target_path}")
    except Exception as e:
        print(f"❌ 复制失败 {source_path}: {str(e)}")
额外注意事项
  • 如果存在同一个前缀对应多个完整文件的情况(比如同一个ID和日期下有多个时间点的文件),上面的字典会只保留最后一个匹配的文件。如果需要保留所有匹配项,可以把字典的值改成列表,比如:
    prefix_full_map = {}
    for file_path in full_file_paths:
        filename = os.path.basename(file_path)
        prefix = filename.split("#")[0]
        if prefix not in prefix_full_map:
            prefix_full_map[prefix] = []
        prefix_full_map[prefix].append(file_path)
    
    后续处理时需要遍历列表里的所有文件进行复制。
  • 路径建议用绝对路径,避免因工作目录变化导致的路径错误。
  • 如果不想覆盖目标目录中已存在的文件,可以在复制前添加判断:if not os.path.exists(target_path):

内容的提问来源于stack exchange,提问作者e.matt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:49:32