Python读取xlsx文件的实现方法
脚本如下:
fromopenpyxlimportload_workbook workbook=load_workbook(u'/tmp/test.xlsx')#找到需要xlsx文件的位置 booksheet=workbook.active#获取当前活跃的sheet,默认是第一个sheet #如果想获取别的sheet页采取下面这种方式,先获取所有sheet页名,在通过指定那一页。 #sheets=workbook.get_sheet_names()#从名称获取sheet #booksheet=workbook.get_sheet_by_name(sheets[0]) #获取sheet页的行数据 rows=booksheet.rows #获取sheet页的列数据 columns=booksheet.columns i=0 #迭代所有的行 forrowinrows: i=i+1 line=[col.valueforcolinrow] cell_data_1=booksheet.cell(row=i,column=3).value#获取第i行1列的数据 cell_data_2=booksheet.cell(row=i,column=4).value#获取第i行2列的数据 cell_data_3=booksheet.cell(row=i,column=8).value#获取第i行3列的数据 cell_data_4=booksheet.cell(row=i,column=18).value#获取第i行4列的数据 print(cell_data_1,cell_data_2,cell_data_3,cell_data_4)
实例:python读取excel数据做分类统计
某excel中记录了某个人的通话记录,下面程序将按照通话地点,通话类型等统计通话时间
#-*-coding:utf-8-*-
importxlrd
importdatetime
infos=[]
info_file=xlrd.open_workbook('src.xls')#打开excel文件
info_sheet=info_file.sheets()[0]#通过索引顺序获取工作表
row_count=info_sheet.nrows#获取行数,列数ncols
forrowinrange(1,row_count):
time_string=info_sheet.cell(row,3).value
time_s_sp=time_string.split(':')
infos.append(#该数组里放了row_count个字典
{
'type':info_sheet.cell(row,2).value,#获取单元格,通话类型,主叫被叫
'other_cellphone':info_sheet.cell(row,0).value,#对方号码,
'timespan':datetime.timedelta(seconds=int(time_s_sp[2]),minutes=int(time_s_sp[1]),hours=int(time_s_sp[0])),
'gpscity':info_sheet.cell(row,5).value#通话是本地还是外地
}
)
time_all=datetime.timedelta(seconds=0)#初始化
time_types={}
time_classes={}
time_numbers={}
forinforininfos:#取出该数组里的字典
time_all+=infor['timespan']#求总通话次数
infor_type=infor['type']
ifinfor_typeintime_types:
time_types[infor_type]+=infor['timespan']
else:
time_types[infor_type]=infor['timespan']#按通话类型统计通话时间
infor_class=infor['gpscity']
ifinfor_classintime_classes:
time_classes[infor_class]+=infor['timespan']
else:
time_classes[infor_class]=infor['timespan']#这里相当于先分类赋值再++,按归属地统计通话时间
infor_number=infor['other_cellphone']
ifinfor_numberintime_numbers:
time_numbers[infor_number]+=infor['timespan']
else:
time_numbers[infor_number]=infor['timespan']#根据号码统计通话时间
print'总通话时间:%s'%time_all
print
print'总通话方式分类'
fork,vintime_types.items():
printk.encode('utf-8'),v
print
print'通话类型分类:'
fork,vintime_classes.items():
printk.encode('utf-8'),v
print
print'对方号码分类:'
fork,vintime_numbers.items():
printk,v
再优化下代码
#-*-coding:utf-8-*-
importxlrd
fromdatetimeimporttimedelta
defread_excel(file_excel):#读excel并将需要的数据分类放在数组里
infos=[]
info_file=xlrd.open_workbook(file_excel)
info_sheet=info_file.sheets()[0]
row_count=info_sheet.nrows
forrowinrange(1,row_count):
time_string=info_sheet.cell(row,3).value
time_s_sp=time_string.split(':')
infos.append(
{
'type':info_sheet.cell(row,2).value,
'other_cellphone':info_sheet.cell(row,0).value,
'timespan':timedelta(seconds=int(time_s_sp[2]),minutes=int(time_s_sp[1]),hours=int(time_s_sp[0])),
'gpscity':info_sheet.cell(row,5).value
}
)
returninfos
defcount_cell(list_dirs,infotype):#统计总通话及分类统计结果,存在字典里
result_dir={}
time_all=timedelta(seconds=0)
forlist_dirinlist_dirs:
time_all+=list_dir['timespan']
info_type=list_dir[infotype]
ifinfo_typenotinresult_dir:
result_dir[info_type]=list_dir['timespan']
else:
result_dir[info_type]+=list_dir['timespan']
returntime_all,result_dir
defprint_result(result_dir):#打印数据
fork,vinresult_dir.items():
printk.encode('utf-8'),v
if__name__=="__main__":
list_dirs=read_excel('src.xls')
time_all,result_type=count_cell(list_dirs,'type')
result_cell=count_cell(list_dirs,'other_cellphone')
result_gpscity=count_cell(list_dirs,'gpscity')
print'总通话时间:%s'%time_all
print'按照通话类型分类:'
print_result(result_type)
print'按照号码分类:'
print_result(result_cell[1])
print'按照归属地分类:'
print_result(result_gpscity[1])
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。