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

如何用Python复制指定图片至另一文件夹?解决scandir路径空字符错误

错误排查与修正方案

错误原因

  1. 路径参数完全错误:你用c.tobytes()把numpy数组转成了字节串,然后把这个字节串传给shutil.copytree当源路径。但copytree是用来复制整个目录的,需要传入合法的字符串路径,而不是包含空字符的字节串,这直接触发了路径解析错误。
  2. 文件筛选逻辑偏差:你当前的numpy切片逻辑b.reshape(-1, 1)[::2].ravel()取的是索引0、2、4、6、8的文件,对应1.jpg、3.jpg、5.jpg、7.jpg、9.jpg,和你实际需要的1.jpg、2.jpg、4.jpg、6.jpg、8.jpg完全不符。

正确实现方法

方法一:手动指定要复制的文件(最直观)

直接列出目标文件,逐个复制:

import os
import shutil

src_dir = '10_f/'
dst_dir = 'folder/'

# 确保目标文件夹存在,不存在则自动创建
os.makedirs(dst_dir, exist_ok=True)

# 指定需要复制的文件列表
target_files = ['1.jpg', '2.jpg', '4.jpg', '6.jpg', '8.jpg']

for file_name in target_files:
    src_path = os.path.join(src_dir, file_name)
    dst_path = os.path.join(dst_dir, file_name)
    # copy2会保留文件的创建/修改时间等元数据
    shutil.copy2(src_path, dst_path)

方法二:按规则自动筛选文件

如果需要通过文件名规则筛选(比如指定数字编号),可以解析文件名实现:

import os
import shutil

src_dir = '10_f/'
dst_dir = 'folder/'

os.makedirs(dst_dir, exist_ok=True)

# 定义需要保留的文件编号
target_numbers = {1, 2, 4, 6, 8}

for file_name in os.listdir(src_dir):
    if file_name.endswith('.jpg'):
        try:
            # 提取文件名中的数字部分
            num = int(file_name.split('.')[0])
            if num in target_numbers:
                src_path = os.path.join(src_dir, file_name)
                dst_path = os.path.join(dst_dir, file_name)
                shutil.copy2(src_path, dst_path)
        except ValueError:
            # 跳过非数字命名的jpg文件
            continue

补充说明

  • os.makedirs(dst_dir, exist_ok=True):避免因目标文件夹不存在导致复制失败,不存在时会自动创建。
  • shutil.copy2:比基础的shutil.copy更实用,会保留文件的元数据(如创建时间、修改时间)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:58:38