前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python批量获取文件信息

Python批量获取文件信息

作者头像
披头
发布2020-07-01 15:13:00
1.2K0
发布2020-07-01 15:13:00
举报
文章被收录于专栏:datartisandatartisan

看视频时打开视频才能看到视频的播放时长,但是每个视频都打开又太繁琐了,能不能用python来获取这一信息呢?答案是肯定的,就是过程有些周折。

获取文件下所有文件

使用os.listdir获取文件目录下所有文件

代码语言:javascript
复制
import os

path = r'D:\temp\20200626' 
fileList = os.listdir(path)

获取文件大小

使用os.stat()中的 st_size 属性获取文件大小

代码语言:javascript
复制
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:\temp\20200626
1  2018.03.21-21.39.28.mp4          0.60             0.20  D:\temp\20200626
2  2018.03.21-21.40.12.mp4          0.51             0.17  D:\temp\20200626
3  2018.04.08-14.32.36.mp4          1.16             0.39  D:\temp\20200626
4  2018.04.08-14.58.16.mp4          5.82             1.94  D:\temp\20200626

写入当前目录

代码语言: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:\temp\20200626
1  2018.03.21-21.39.28.mp4          0.60             0.20  D:\temp\20200626
2  2018.03.21-21.40.12.mp4          0.51             0.17  D:\temp\20200626
3  2018.04.08-14.32.36.mp4          1.16             0.39  D:\temp\20200626
4  2018.04.08-14.58.16.mp4          5.82             1.94  D:\temp\20200626
5             filesize.csv          0.00             0.00  D:\temp\20200626

很显然,这不是我想要的结果,我想到了两个方法来处理这个问题

方法1:写入上级目录

文件管理系统中..表示上级目录,使用如下代码便可以规避上边的问题

代码语言:javascript
复制
df.to_csv(path+ r'\..\filesize.csv', encoding='gbk')

方法2:过滤视频文件

由于写入的文件是csv格式,程序在开始处理时,只处理视频文件即可,代码改写如下:

代码语言:javascript
复制
path = r'D:\temp\20200626' 
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:\temp\20200626' 
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 --

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乐享数据8090 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取文件下所有文件
  • 获取文件大小
  • 获取视频文件播放时长
  • 使用pandas写入文件
  • 方法1:写入上级目录
  • 方法2:过滤视频文件
  • 完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档