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

请求修改Python文件迁移代码,实现特定文件名筛选迁移

问题分析与解决方案

你的代码核心问题是:筛选条件的if语句只做了打印,实际的文件复制、添加到rasters/mosaic列表的操作都在if块外面,不管文件是否符合筛选条件,这些操作都会执行,所以才会迁移文件夹里的全部文件。

下面针对你的需求提供两种修改方案:


方案1:按文件名中的日期筛选(支持指定日份或完整日期)

如果要按日期日份筛选(比如只迁移日份为14的文件),或者按完整日期(如2017-10-14)筛选,需要先统一日期字符串的格式,再把所有操作放到if判断内部:

# 按日期筛选迁移指定文件
import os
import shutil
from datetime import datetime, timedelta

def movefiles(folder, ctr, stop):
    print('moving')
    # 定义日期格式,和文件名里的日期格式保持一致
    date_format = '%Y-%m-%d'
    for i in range(0, stop):
        day_delta = ctr.date + timedelta(days=i)
        # 把datetime对象转成和文件名一致的字符串格式
        target_date_str = day_delta.strftime(date_format)
        # 如果只想筛选日份,比如只找14号的文件,用下面这行替换上面的target_date_str
        # target_day = str(day_delta.day)
        
        src_fldr = r'path/source/folder'  # 替换为实际源文件夹路径
        src_items = os.listdir(src_fldr)

        for rci in src_items:
            # 跳过文件夹,只处理文件
            if not os.path.isfile(os.path.join(src_fldr, rci)):
                continue
            rci_segments = rci.split('_')
            # 先判断文件名格式是否符合预期,避免索引越界
            if len(rci_segments) < 2:
                continue
            
            output_folder = os.path.join(folder, rci_segments[0])
            # 确保输出文件夹存在,避免复制失败
            os.makedirs(output_folder, exist_ok=True)

            # 条件1:匹配国家代码;条件2:匹配完整日期(如果要匹配日份,改成rci_segments[1].split('-')[2] == target_day)
            if ctr.country in rci and rci_segments[1] == target_date_str:
                print(f'正在迁移: {rci}')
                local_filename = os.path.join(output_folder, f'del{rci}')

                try:
                    shutil.copy(os.path.join(src_fldr, rci), local_filename)
                except Exception as e:
                    print(f'迁移出错: {str(e)}')
                    continue  # 出错就跳过当前文件,继续处理下一个

                out_rast = os.path.join(folder, rci_segments[0], rci)
                ctr.rasters.append([local_filename, out_rast])
                
                # 这里的日期判断也需要统一格式
                next_day_str = (ctr.date + timedelta(days=1)).strftime(date_format)
                if rci_segments[1] == next_day_str:
                    ctr.mosaic.append(out_rast)
    print('-------------')
    return

关键修改点:

  1. 把文件复制、列表添加等核心操作全部放到if判断块内部,只有符合条件的文件才会执行这些操作
  2. 统一日期字符串格式(用strftime),避免datetime对象转字符串后格式不匹配导致筛选失效
  3. 增加了格式校验(判断文件名拆分后的段数)和文件夹判断,避免报错
  4. 自动创建输出文件夹,不用手动提前创建

方案2:匹配完整文件名

如果需要精确匹配指定的完整文件名(比如只迁移USA_2017-10-14_rci_box1.tif),可以直接判断文件名是否在目标列表中:

# 按完整文件名匹配迁移
import os
import shutil
from datetime import datetime, timedelta

def movefiles(folder, ctr, stop):
    print('moving')
    # 定义要匹配的完整文件名列表
    target_filenames = [
        'USA_2017-10-14_rci_box1.tif',
        # 可以添加更多目标文件名
    ]
    
    src_fldr = r'path/source/folder'  # 替换为实际源文件夹路径
    src_items = os.listdir(src_fldr)

    for rci in src_items:
        # 跳过文件夹,只处理文件
        if not os.path.isfile(os.path.join(src_fldr, rci)):
            continue
        # 判断当前文件名是否在目标列表中
        if rci in target_filenames:
            print(f'正在迁移: {rci}')
            rci_segments = rci.split('_')
            output_folder = os.path.join(folder, rci_segments[0])
            os.makedirs(output_folder, exist_ok=True)
            
            local_filename = os.path.join(output_folder, f'del{rci}')
            try:
                shutil.copy(os.path.join(src_fldr, rci), local_filename)
            except Exception as e:
                print(f'迁移出错: {str(e)}')
                continue

            out_rast = os.path.join(folder, rci_segments[0], rci)
            ctr.rasters.append([local_filename, out_rast])
            
            # 如果需要日期相关的mosaic逻辑,保留原判断(注意统一日期格式)
            date_str = rci_segments[1]
            next_day_str = (ctr.date + timedelta(days=1)).strftime('%Y-%m-%d')
            if date_str == next_day_str:
                ctr.mosaic.append(out_rast)
    print('-------------')
    return

关键修改点:

  1. 直接判断文件名是否在target_filenames列表中,符合条件才执行迁移操作
  2. 同样增加了文件/文件夹判断和自动创建输出文件夹的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:58:18