看视频时打开视频才能看到视频的播放时长,但是每个视频都打开又太繁琐了,能不能用python
来获取这一信息呢?答案是肯定的,就是过程有些周折。
获取文件下所有文件
使用os.listdir
获取文件目录下所有文件
import os
path = r'D:temp20200626'
fileList = os.listdir(path)
获取文件大小
使用os.stat()中的 st_size 属性
获取文件大小
filesizelist = []
for f in fileList:
filesize = round(os.stat(path '\' f).st_size/float(1024*1024),2)
# st_size 默认单位是字节,换算成 MB
filesizelist.append(filesize)
获取视频文件播放时长
仔细观察发现,一个视频源的文件,其文件大小和视频播放时长是成正比的,这里的比例大致为3/1
使用pandas写入文件
代码语言:javascript复制import pandas as pd
df = pd.DataFrame(list(zip(fileList,filesizelist)))
# 修改列名
df.columns = ['fileName','fileSize(MB)']
# 添加文件播放时长列
df['fileDuration(H)'] = round(df['fileSize(MB)'] / 3, 2)
# 添加文件目录
df['filePath'] = path
print(df)
fileName fileSize(MB) fileDuration(H) filePath
0 2018.03.09-20.22.42.mp4 0.44 0.15 D:temp20200626
1 2018.03.21-21.39.28.mp4 0.60 0.20 D:temp20200626
2 2018.03.21-21.40.12.mp4 0.51 0.17 D:temp20200626
3 2018.04.08-14.32.36.mp4 1.16 0.39 D:temp20200626
4 2018.04.08-14.58.16.mp4 5.82 1.94 D:temp20200626
写入当前目录
代码语言:javascript复制df.to_csv(path r'filesize.csv', encoding='gbk')
写入当前目录代码比较简单,但是第二次运行程序时就会识别到第一次写入的这个文件,类似这样
代码语言:javascript复制 fileName fileSize(MB) fileDuration(H) filePath
0 2018.03.09-20.22.42.mp4 0.44 0.15 D:temp20200626
1 2018.03.21-21.39.28.mp4 0.60 0.20 D:temp20200626
2 2018.03.21-21.40.12.mp4 0.51 0.17 D:temp20200626
3 2018.04.08-14.32.36.mp4 1.16 0.39 D:temp20200626
4 2018.04.08-14.58.16.mp4 5.82 1.94 D:temp20200626
5 filesize.csv 0.00 0.00 D:temp20200626
很显然,这不是我想要的结果,我想到了两个方法来处理这个问题
方法1:写入上级目录
文件管理系统中..
表示上级目录,使用如下代码便可以规避上边的问题
df.to_csv(path r'..filesize.csv', encoding='gbk')
方法2:过滤视频文件
由于写入的文件是csv
格式,程序在开始处理时,只处理视频文件即可,代码改写如下:
path = r'D:temp20200626'
fileList = os.listdir(path)
videoList = []
for f in fileList:
if os.path.splitext(path '\' f)[1] in ('.mp4','wmv','swf','avi'):
videoList.append(f)
filesizelist = []
for f in videoList:
filesize = round(os.stat(path '\' f).st_size/float(1024*1024),2)
# st_size 默认单位是字节,换算成 MB
filesizelist.append(filesize)
完整代码
代码语言:javascript复制import os
import pandas as pd
path = r'D:temp20200626'
fileList = os.listdir(path)
videoList = []
for f in fileList:
if os.path.splitext(path '\' f)[1] in ('.mp4','wmv','swf','avi'):
videoList.append(f)
filesizelist = []
for f in videoList:
filesize = round(os.stat(path '\' f).st_size/float(1024*1024),2)
# st_size 默认单位是字节,换算成 MB
filesizelist.append(filesize)
df = pd.DataFrame(list(zip(videoList,filesizelist)))
df.columns = ['fileName','fileSize(MB)']
df['fileDuration(H)'] = round(df['fileSize(MB)'] / 3, 2)
df['filePath'] = path
print(df)
# # 写入当前目录
# df.to_csv(path r'filesize.csv', encoding='gbk')
# 写入上级目录
df.to_csv(path r'..filesize.csv', encoding='gbk')
-- END --