Python读取Excel文件并生成分析结果

Posted 老岳博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 




 

以上是关于Python读取Excel文件并生成分析结果的主要内容,如果未能解决你的问题,请参考以下文章

OleDB读取Myxls生成的Excel文本,结果只能读取到第一列的值

Python读取Excel数据生成图表 v2.0

Python爬虫b站视频弹幕并生成词云图分析

Python读取多个excel文件(删除字段数据格式转换dataframe多表合并)并写入ElasticSearch实战(自动创建索引写入ElasticSearch探索性数据分析)

通过python读取xlsx中的数据生成各种图标

使用python读取excel中的数据,并重新写入到新的excel中