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

如何扫描目录并按条件移动文件?Python代码遇TypeError报错求助

批量移动指定格式文件的代码修正方案

错误原因分析

  1. os.listdir(source_dir)返回的是文件名列表,直接将整个列表传入pathlib.Path()会触发TypeError,因为Path()仅接受单个字符串或路径对象,不支持列表。
  2. 代码未遍历列表中的每个文件名,直接对整个列表操作,逻辑不成立。
  3. if extension == '.jpg' or '.png'的条件写法错误:or右侧的.png是是非空字符串,会被Python视为True,导致所有条目都会被判定为符合条件,正确逻辑应判断扩展名是否属于目标格式集合。
  4. 未判断当前条目是否为文件,可能误移动子目录。

修正后的代码

import os 
import shutil
import pathlib

source_dir = r'C:\Users\zaner\Downloads'
target_dir = r'C:\Users\zaner\OneDrive\Pictures'    

# 遍历源目录下的所有条目
for item_name in os.listdir(source_dir):
    # 拼接完整的源文件路径
    source_path = os.path.join(source_dir, item_name)
    # 仅处理文件,跳过子目录
    if os.path.isfile(source_path):
        # 获取扩展名并转小写,兼容JPG/PNG等大写格式
        extension = pathlib.Path(source_path).suffix.lower()
        # 判断是否为目标格式
        if extension in ('.jpg', '.jpeg', '.png'):
            # 拼接目标路径
            target_path = os.path.join(target_dir, item_name)
            # 执行移动操作
            shutil.move(source_path, target_path)

额外优化说明

  • 加入os.path.isfile()判断,避免误移动子目录。
  • 用.lower()统一扩展名大小写,覆盖大写格式的图片文件。
  • 条件判断改用集合成员检查,逻辑更清晰简洁。
  • 显式拼接目标路径,避免shutil.move因路径问题抛出异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 16:42:23