如何用Python复制指定图片至另一文件夹?解决scandir路径空字符错误
错误排查与修正方案
错误原因
- 路径参数完全错误:你用
c.tobytes()把numpy数组转成了字节串,然后把这个字节串传给shutil.copytree当源路径。但copytree是用来复制整个目录的,需要传入合法的字符串路径,而不是包含空字符的字节串,这直接触发了路径解析错误。 - 文件筛选逻辑偏差:你当前的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
相关产品推荐
相关产品推荐

