1. 程式人生 > >Python獲取檔案目錄下視訊時長、大小、並寫入excle檔案

Python獲取檔案目錄下視訊時長、大小、並寫入excle檔案

關鍵詞:os moviepy xlwt

# -*- coding=utf-8 -*-
import os
import sys
import xlwt
from moviepy.editor import VideoFileClip

file_dir = u"G:/視訊目錄/" #定義檔案目錄

class FileCheck():

    def __init__(self):
        self.file_dir = file_dir
    
    def get_filesize(self,filename):
        u"""
        獲取檔案大小(M: 兆)
        """
        file_byte = os.path.getsize(filename)
        return self.sizeConvert(file_byte)

    def get_file_times(self,filename):
        u"""
        獲取視訊時長(s:秒)
        """
        clip = VideoFileClip(filename)
        file_time = self.timeConvert(clip.duration)
        return file_time

    def sizeConvert(self,size):# 單位換算
        K, M, G = 1024, 1024**2, 1024**3
        if size >= G:
            return str(size/G)+'G Bytes'
        elif size >= M:
            return str(size/M)+'M Bytes'
        elif size >= K:
            return str(size/K)+'K Bytes'
        else:
            return str(size)+'Bytes'
    
    def timeConvert(self,size):# 單位換算
        M, H = 60, 60**2
        if size < M:
            return str(size)+u'秒'
        if size < H:
            return u'%s分鐘%s秒'%(int(size/M),int(size%M))
        else:
            hour = int(size/H)
            mine = int(size%H/M)
            second = int(size%H%M)
            tim_srt = u'%s小時%s分鐘%s秒'%(hour,mine,second)
            return tim_srt

    def get_all_file(self):
        u"""
        獲取視訊下所有的檔案
        """
        for root, dirs, files in os.walk(file_dir):  
            return files #當前路徑下所有非目錄子檔案


print u"=============開始,檔案較多,請耐心等待..."
fc = FileCheck()
files = fc.get_all_file()
datas = [[u'檔名稱', u'檔案大小', u'視訊時長']]#二維陣列
for f in files:
    cell = []
    file_path = os.path.join(file_dir,f)
    file_size = fc.get_filesize(file_path)
    file_times = fc.get_file_times(file_path.encode("gbk"))
    print u"檔名字:{filename},大小:{filesize},時長:{filetimes}".format(filename=f,filesize=file_size,filetimes=file_times)
    cell.append(f)
    cell.append(file_size)
    cell.append(file_times)
    datas.append(cell)

wb = xlwt.Workbook() #建立工作簿
sheet = wb.add_sheet('data')#sheet的名稱為test
     
#單元格的格式
style = 'pattern: pattern solid, fore_colour yellow; '#背景顏色為黃色
style += 'font: bold on; '#粗體字
style += 'align: horz centre, vert center; '#居中
header_style = xlwt.easyxf(style)
     
row_count = len(datas)
col_count = len(datas[0])
for row in range(0, row_count): 
    col_count = len(datas[row]) 
    for col in range(0, col_count):
        if row == 0:#設定表頭單元格的格式
            sheet.write(row, col, datas[row][col], header_style)
        else:
            sheet.write(row, col, datas[row][col])
wb.save(file_dir+"video.xlsx")
print u"=============完成"