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

Python使用shutil.move移动匹配文件时仅移动单个文件的问题如何修复?

问题根因
  1. 移动逻辑缩进错误:你把shutil.move()语句放在了if not os.path.isdir(thirdfolder)的判断分支内部,只有首次创建目标文件夹的时候才会触发文件移动。当第一个匹配到指定子串的文件完成文件夹创建后,后续遍历到的其他匹配文件,会因为文件夹已存在无法进入该分支,自然不会执行移动操作。你观察到每次只移动一个文件,是因为os.listdir()的遍历顺序受系统规则影响,每次运行会取遍历顺序里第一个匹配到的文件移动,剩余文件留在原目录。
  2. 每次运行清空历史文件:代码开头直接执行shutil.rmtree('Animals'),会把整个Animals目录及内部所有文件删除,上次运行移动进去的文件都会被清空。
修复方案

首先调整移动语句的缩进,将shutil.move()放到文件夹判断的外面。如果不需要每次运行都清空已归类的文件,直接删除开头的shutil.rmtree('Animals')语句即可。
此外你可以用字典映射动物名称和对应编号,消除重复代码,优化后代码如下:

import os
import shutil

def move():
    # 动物和对应编号的映射,后续新增规则直接在这里加即可
    animal_map = {
        '1837': 'Buffalo',
        '6104': 'donkey',
        '9731': 'Chimpanzee',
        '2905': 'cat',
        '6648': 'rat',
        '3128': 'sheep',
        '3053': 'lizard',
        '2681': 'insect',
        '3901': 'dog'
    }
    # 如果不需要每次清空已归类的文件,注释/删除下面这行
    # shutil.rmtree('Animals')
    firstfolder = 'Animals'
    if not os.path.isdir(firstfolder):
        os.mkdir(firstfolder)

    for file in os.listdir():
        # 跳过目录,只处理文件
        if not os.path.isfile(file):
            continue
        for code, animal_name in animal_map.items():
            if code in file:
                secondfolder = os.path.join(firstfolder, animal_name)
                thirdfolder = os.path.join(secondfolder, 'testfolder')
                if not os.path.isdir(secondfolder):
                    os.mkdir(secondfolder)
                if not os.path.isdir(thirdfolder):
                    os.mkdir(thirdfolder)
                # 移动语句放到判断外面,不管文件夹是否刚创建都执行移动
                shutil.move(file, thirdfolder)
                # 一个文件只匹配一个规则,匹配到就跳出循环不用继续判断
                break

if __name__ == '__main__':
    move()
注意事项
  • 新增的跳过目录逻辑避免把Animals本身当成文件处理,防止报错
  • 用os.path.join拼接路径适配不同操作系统,避免Windows/Linux路径分隔符不兼容的问题
  • 匹配到对应规则后加break,避免一个文件匹配多个规则导致移动异常

内容的提问来源于stack exchange,提问作者Hacker--Rohan Raj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:45:02