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

如何让Python函数逐个返回目录文件名以循环处理视频?

问题分析与解决方案

你的核心问题出在loop_dir()函数里——你用了return语句,这会让函数在找到第一个文件后就直接返回,所以每次调用这个函数都只会拿到同一个(第一个)文件名,自然循环里不会更新。我们需要把它改成生成器函数,用yield来逐个返回文件,这样每次迭代都能拿到下一个文件名。

另外,你的主循环里同时用了os.scandir和loop_dir(),逻辑有点重复,可以整合得更清晰;还有mk_dir()函数里的os.path.dirname属于多余操作,直接创建目标文件夹路径即可。

具体修改步骤:

  1. 重构loop_dir()为生成器
    把return换成yield,函数会变成一个迭代器,每次调用时逐个返回目录里的MP4文件名:

    def loop_dir():
        for file in glob.glob('/Users/++++/+++/test/*.mp4'):
            yield str(file).split('/')[-1]
    
  2. 简化mk_dir()函数
    去掉冗余的os.path.dirname,直接创建目标文件夹,逻辑更简洁:

    def mk_dir():
        i = 1
        while True:
            path = f"Folder_{i}/"
            if not os.path.exists(path):
                os.makedirs(path, exist_ok=False)
                return path
            i += 1
    
  3. 调整主循环逻辑
    遍历loop_dir()返回的文件名,每个文件对应创建一个新文件夹,再执行转换命令:

    for vid_name in loop_dir():
        target_folder = mk_dir()
        os.system(f'python3 video2images.py -i /Users/++++/++++/test/{vid_name} \
        -o /Users/++++/++++/{target_folder} \
        --sample_interval 2 \
        --max_frames 100')
    

    这里用f-string拼接命令,比字符串相加更清晰易读,也避免了不必要的转义。

完整修改后的代码:

import os
import glob

def loop_dir():
    # 生成器:逐个返回MP4文件名
    for file in glob.glob('/Users/++++/+++/test/*.mp4'):
        yield str(file).split('/')[-1]

def mk_dir():
    # 创建第一个不存在的Folder_i
    i = 1
    while True:
        path = f"Folder_{i}/"
        if not os.path.exists(path):
            os.makedirs(path, exist_ok=False)
            return path
        i += 1

# 遍历每个视频文件,创建对应文件夹并执行转换命令
for vid_name in loop_dir():
    target_folder = mk_dir()
    cmd = f'''python3 video2images.py \
-i /Users/++++/++++/test/{vid_name} \
-o /Users/++++/++++/{target_folder} \
--sample_interval 2 \
--max_frames 100'''
    os.system(cmd)

额外说明:

  • 生成器函数(yield)的好处是不会一次性把所有文件名加载到内存,适合处理大量文件的场景。
  • 用f-string拼接命令比传统字符串相加更直观,也减少了出错概率。
  • 如果你的video2images.py支持批量处理,还能进一步优化流程,但目前的修改已经能解决你“逐个处理每个视频到对应新文件夹”的核心需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:08:01