小尹学python

导航

Python:获取文件夹里视频总时长(生成器)

import os
from moviepy.editor import VideoFileClip

data = os.walk(f'E:\迅雷下载\黑色太阳')
# print(data)  # data返回的是一个生成器,<generator object _walk at 0x0000020C754EB6D0>
# v = next(data)  # 使用next,返回生成器的值
# print(v)  # 输出('E:\\迅雷下载\\黑色太阳', ['韩语中字'], ['黑色太阳.第01集.韩语中字.720p.mp4', '黑色太阳.第02集.韩语中字.720p.mp4',
# # '黑色太阳.第03集.韩语中字.720p.mp4', '黑色太阳.第04集.韩语中字.720p.mp4', '黑色太阳.第05集.韩语中字.720p.mp4',
# # '黑色太阳.第06集.韩语中字.720p.mp4'])
# v11 = next(data)  # 继续运行这一生成器,会继续往下走,也即这一文件夹里的子目录
# print(v11) # ('E:\\迅雷下载\\黑色太阳\\韩语中字', [], [])
def count_time():
    times = 0
    for file_path, subdirectory, file_names in data:
        for file_name in file_names:
            o_file_path = os.path.join(file_path, file_name)
            name = file_name.rsplit('.', 1)[-1]
            if name == 'mp4':
                clip = VideoFileClip(o_file_path)
                times += clip.duration
    times = round(times, 2)
    return times


print('总计时长', count_time(), '秒')  # 总计时长 25270.32 秒
v1 = count_time()
v2 = count_time()
v3 = count_time()
print(v1)  # 0
print(v2)  # 0
print(v3)  # 0
# 由于os.walk(f'E:\迅雷下载\黑色太阳')返回的是一个生成器,因此第二次运行函数的时候,会在上一次基础上继续往下执行,也即向这个文件夹的子目录
# 去执行,子目录是空的,因此最后三个函数运行返回值均为0
# 要想每次运行都生成一个同样的结果,可把函数里的data替换成os.walk(f'E:\迅雷下载\黑色太阳')

posted on 2021-10-24 13:38  小尹学python  阅读(467)  评论(0编辑  收藏  举报