python练习——多个excel表格模板的读取,并进行简要的统计分析

做了一个小小的项目,主要是帮朋友做一个表格的数据统计,由于这个表格是面向其他人的,他们报上来的材料可能会改变一些格式,比如这个excel模板的sheet1就被隐藏了,所以我当时识别的时候很奇怪,一直有乱起八早的数据,所以就加了些识别。

总的来说,这段程序,就是能实现一个基本的对多个相同模板的excel进行读取,并且计算出一些基本的统计分析,比如某一列的中是否完成等等。

模板就是类似于这样的:
python练习——多个excel表格模板的读取,并进行简要的统计分析_第1张图片
收集上来,需要统计的模板就放到一个统一的文件夹里,程序会用os库,来让你指定一个目录,再这个目录下,系统会自动读取所有需要纳入统计的模板材料,如下图:
python练习——多个excel表格模板的读取,并进行简要的统计分析_第2张图片

import xlrd
import os.path


path = input('输入excel表格所在文件夹目录(如d:/test/test1):')
#path = 'd:/python/fzc'
fileList = os.listdir(path)
print(fileList)

zbhz=[]
with open ('output.txt','w') as f1:
    for file in fileList:
        filepath = path+'/'+file
        sheet_num = 0
        book = xlrd.open_workbook(filepath)
        for x in range(2): #x是sheet的序号
            sheet1 = book.sheets()[x]
            if sheet1.cell(4, 0).value == '序号':
            #得出表格所在sheet的编号
                sheet_num = x

        sheet = book.sheets()[sheet_num]
        nrows = sheet.nrows#得到这页sheet的行数
        col4_values = sheet.col_values(4)#第四列数据赋值给col4_values数组
        col2_values = sheet.col_values(1)#第2列数据赋值给col1——values
        # print(col4_values)

        #计算每个单位所有指标的完成数,未完成数
        num_Finish = col4_values.count('否') + col4_values.count('完成')
        num_NotFinish = col4_values.count('是') + col4_values.count('未完成')

        #计算完成率和非完成率的比例
        ratio_Finish = str(round(num_Finish / 18 * 100, 2)) + '%'
        ratio_NotFinish = str(round(num_NotFinish / 18 * 100, 2)) + '%'

        #打印输出所需结果
        print(str(sheet.cell(3, 2)) + "完成率" + str(ratio_Finish) + ' ' + '未完成率' + str(ratio_NotFinish))
        f1.write(str(sheet.cell(3, 2)) + "完成率" + str(ratio_Finish) + ' ' + '未完成率' + str(ratio_NotFinish)+'\n')
        #print(col4_values)
        #print(col4_values[5:23])

        values = col4_values[5:23]
        zhibiao = col2_values[5:23]
        chengshi = sheet.cell(3,2)
        zhibiao_chengshi = []
        for l in range(18):#1到18行遍历,做一个行数一样的城市列表
            zhibiao_chengshi.append(chengshi)
        #将城市列表和是否完成指标的列表一一整合
        x = list(zip(zhibiao_chengshi,values))#把每一行的指标值和城市相对应
        #print(zhibiao)
        zbhz.append(x)

    zb=[]
    count_eachzhibiao = []
    for y in range(18):
        count= 0
        ncount = 0
        wanchengdanwei=[]
        weiwanchengdanwei=[]
        for x in range(len(zbhz)):
            if zbhz[x][y][1] == '是':
                count = count+1
                wanchengdanwei.append(zbhz[x][y][0])
            else:
                ncount = ncount +1
                weiwanchengdanwei.append(zbhz[x][y][0])
        ratio_F = str(round(count/(len(zbhz))*100,2)) +'%'
        ratio_no = str(round(ncount/(len(zbhz))*100,2))+'%'
        print(zhibiao[y])
        print('指标完成数='+str(count)+' 完成比例='+ratio_F)
        print('完成单位'+str(wanchengdanwei))
        f1.write(zhibiao[y]+'\n')
        f1.write('    指标完成数='+str(count)+' 完成比例='+ratio_F+'\n')
        f1.write('    完成单位'+str(wanchengdanwei)+'\n')
        print('未完成数='+str(ncount)+' 未完成比例='+ratio_no)
        print('未完成单位:' + str(weiwanchengdanwei))
        f1.write('    未完成数='+str(ncount)+' 未完成比例='+ratio_no+'\n')
        f1.write('    未完成单位:' + str(weiwanchengdanwei)+'\n')
        f1.write('\n')
        print('\n')


你可能感兴趣的:(小白的积累,python,数据分析)