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

如何根据文本文件中存储的名称从指定文件夹复制对应图片

问题原因
  • 文件指针耗尽问题:f.readlines() 被放在遍历图片的内层循环中,第一次读取完txt所有内容后,文件指针会移动到文件末尾,后续遍历其他图片时再次调用f.readlines()只能得到空列表,不会进入匹配逻辑。
  • 字符串匹配未处理特殊字符:从txt读取的每一行line默认携带末尾的换行符\n,还有可能存在首尾空格、空行,直接和无特殊字符的j做相等判断永远会失败。
  • 复制路径缺少文件后缀:txt中存储的是不带后缀的文件名,调用shutil.copy时直接用line.strip()拼接路径,拼接出的路径没有.jpg后缀,指向的文件不存在,即使匹配上也无法完成复制。
修复后的代码
import os
import shutil

dst = "t"
path = 'train' 
# 提前读取txt所有内容,存为去重、去首尾空白的集合,过滤空行,提升匹配效率
with open("file_txt.txt", 'r') as f:
    target_names = {line.strip() for line in f if line.strip()}

files = os.listdir(path)
for i in files :
    if i.endswith('.jpg'):
        j = i.rsplit('.', 1)[0]
        if j in target_names:
            # 用os.path.join拼接路径,兼容不同操作系统的路径分隔符,直接用原文件名避免后缀错误
            shutil.copy(os.path.join(path, i), dst)
额外优化说明
  • 用with语句管理文件句柄,自动关闭文件,避免资源泄漏
  • 目标名存为集合后,匹配时间复杂度从O(n)降到O(1),文件数量多的时候效率提升非常明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:36:05