某excel中记录了某个人的通话记录,下面程序将按照通话地点,通话类型等统计通话时间

# -*- coding:utf-8 -*-
import xlrd
import datetime
infos=[]
info_file=xlrd.open_workbook(\'src.xls\')#打开excel文件
info_sheet=info_file.sheets()[0]#通过索引顺序获取工作表
row_count=info_sheet.nrows#获取行数,列数ncols
for row in range(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={}
for infor in infos:#取出该数组里的字典
    time_all +=infor[\'timespan\']#求总通话次数
    infor_type=infor[\'type\']
    if infor_type in time_types:
        time_types[infor_type]+=infor[\'timespan\']
    else:
        time_types[infor_type]=infor[\'timespan\']#按通话类型统计通话时间
    infor_class=infor[\'gpscity\']
    if infor_class in time_classes:
        time_classes[infor_class]+=infor[\'timespan\']
    else:
        time_classes[infor_class]=infor[\'timespan\']#这里相当于先分类赋值再++,按归属地统计通话时间
    infor_number=infor[\'other_cellphone\']
    if infor_number in time_numbers:
        time_numbers[infor_number]+=infor[\'timespan\']
    else:
        time_numbers[infor_number]=infor[\'timespan\']#根据号码统计通话时间

print \'总通话时间:%s\' % time_all
print
print \'总通话方式分类\'
for k,v in time_types.items():
    print k.encode(\'utf-8\'),v
print
print \'通话类型分类:\'
for k,v in time_classes.items():
    print k.encode(\'utf-8\'),v
print
print \'对方号码分类:\'
for k,v in time_numbers.items():
    print k,v

 再优化下代码

# -*- coding:utf-8 -*-
import xlrd
from datetime import timedelta
def read_excel(file_excel):#读excel并将需要的数据分类放在数组里
    infos=[]
    info_file=xlrd.open_workbook(file_excel)
    info_sheet=info_file.sheets()[0]
    row_count=info_sheet.nrows
    for row in range(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

            }
        )
    return infos
def count_cell(list_dirs,infotype):#统计总通话及分类统计结果,存在字典里
    result_dir={}
    time_all=timedelta(seconds=0)
    for list_dir in list_dirs:
        time_all +=list_dir[\'timespan\']
        info_type = list_dir[infotype]
        if info_type not in result_dir:
            result_dir[info_type]=list_dir[\'timespan\']
        else:
            result_dir[info_type]+=list_dir[\'timespan\']
    return time_all,result_dir
def print_result(result_dir):#打印数据
    for k,v in result_dir.items():
        print k.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])

 

版权声明:本文为facexiaoxi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/facexiaoxi/p/8557080.html