Python讀取Excel文件並生成分析結果


筆者需要對存放在Excel里的很多媒資文件進行分析,這些節目的分辨率有高清、標清之分,高清的節目名稱前面加上“HD-”,比如下面的“HD-護寶聯盟第一季”,標清的則直接是節目名稱,如“HD-護寶聯盟第一季”,這些節目可能分別屬於電視劇、電影、娛樂的欄目,每個節目有對應的時長(分鍾數),然后按欄目放在不同的sheet里

 

需要實現的目標有:

1、統計高清節目的時長,這個在Excel里可以直接統計;

2、統計標清節目的時長,這個在Excel里可以直接統計;

3、統計高清、標清節目的重復率,這里要分析高清節目和標清節目差一個“HD-”的數量及時長,就無法在Excel里簡單實現了,干脆寫一個Python操作Excel文件的博文供大家參考,也可給自己留個筆記。

以下是代碼部分,我在Win7+Pycharm+python3.6里調試通過:

__author__ = 'Yue Qingxuan'
# -*- coding: utf-8 -*-

import sys
import xlrd
import datetime

def trans():
try:
workbook1 = xlrd.open_workbook(r'E:\temp\節目數據.xlsx') #打開Excel文件
#print(workbook1.sheet_by_index(0).nrows)
#print(workbook1.sheet_by_index(0).ncols)

for sheet in range(len(workbook1.sheets())): #循環打開每個sheet
sdname=[] #定義一個數組,存放標清節目的名稱
sdtime=[] #定義一個數組,存放標清節目的時長
hdname=[] #定義一個數組,存放高清節目的名稱
hdtime=[] #定義一個數組,存放高清節目的時長
for row in range(workbook1.sheet_by_index(sheet).nrows):
# print(workbook1.sheet_by_index(sheet).cell(row,3).value.strip())
if (workbook1.sheet_by_index(sheet).cell(row,3).value.strip()=='標清'):
sdname.append(workbook1.sheet_by_index(sheet).cell(row,0).value) #將標清節目的名稱存入數組
sdtime.append(int(workbook1.sheet_by_index(sheet).cell(row,2).value)) #將標清節目的時長存入數組
elif (workbook1.sheet_by_index(sheet).cell(row,3).value.strip()=='高清'):
hdname.append(workbook1.sheet_by_index(sheet).cell(row,0).value) #將高清節目的名稱存入數組
hdtime.append(int(workbook1.sheet_by_index(sheet).cell(row,2).value)) #將高清節目的時長存入數組

repeated_time=0 #定義標清、高清節目的重復時長的計數器,並初始化為0
sdtimes=0 #定義標清節目的時長
hdtimes=0 #定義高清節目的時長
tmpcount=0 #定義標清、高清節目的重復次數的計數器,並初始化為0
for ii in range(len(sdname)):
for kk in range(len(hdname)):
if sdname[ii] == hdname[kk].lstrip('HD-'): #判斷標清節目和高清節目的名稱差一個"HD-"后,是否相等
repeated_time += hdtime[kk]
tmpcount+=1
# print('第{0}個:'.format(tmpcount),'標清名稱:',sdname[ii],' 高清名稱:',hdname[kk],' 標清時長:',sdtime[ii],'高清時長',hdtime[kk])

for iii in range(len(sdname)):
sdtimes += sdtime[iii] #存放標清節目的總時長

for jj in range(len(hdtime)):
hdtimes+=hdtime[jj] #存放高清節目的總時長

print("\n---------------",workbook1.sheet_by_index(sheet).name,'---------------------')
print('重復分鍾數:',repeated_time," 重復小時數:",repeated_time/60,' 取整保留小數點一位:',round(repeated_time/60,1))
print('高清分鍾數:',hdtimes," 高清小時數:",hdtimes/60,' 取整保留小數點一位',round(hdtimes/60,1))
print('標清分鍾數:', sdtimes,' 標清小時數:',sdtimes/60,' 取整保留小數點一位:',round(sdtimes/60,1))
except:
print(sys.exc_info())

if __name__ == '__main__':
print("程序開始時間:", datetime.datetime.now())
trans()
print("程序結束時間:", datetime.datetime.now())



如下是程序運行的結果:


程序開始時間: 2018-12-08 16:04:13.083143

--------------- 電視劇 ---------------------
重復分鍾數: 6776 重復小時數: 112.93333333333334 取整保留小數點一位: 112.9
高清分鍾數: 6777 高清小時數: 112.95 取整保留小數點一位 113.0
標清分鍾數: 9070 標清小時數: 151.16666666666666 取整保留小數點一位: 151.2

--------------- 電影 ---------------------
重復分鍾數: 2371 重復小時數: 39.516666666666666 取整保留小數點一位: 39.5
高清分鍾數: 2986 高清小時數: 49.766666666666666 取整保留小數點一位 49.8
標清分鍾數: 2743 標清小時數: 45.71666666666667 取整保留小數點一位: 45.7

--------------- 娛樂 ---------------------
重復分鍾數: 6630 重復小時數: 110.5 取整保留小數點一位: 110.5
高清分鍾數: 6849 高清小時數: 114.15 取整保留小數點一位 114.2
標清分鍾數: 7033 標清小時數: 117.21666666666667 取整保留小數點一位: 117.2
程序結束時間: 2018-12-08 16:04:13.258153

 




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM