利用xlrd进行excel分类汇总


自从上周一留言板写好后,这几天几乎没写程序,一方面是因为这几天练车,时间少,更主要是没想好下面写点什么好,忘了,前几天还试着写了点pyqt。今天发一个小程序,昨晚写的,当时太晚了,今天发,


仍然是用xlrd,比上次用到的功能多了点,编写过程中遇到了一些问题,最终还是解决了。这个程序的目的是从一个学校资产xls文件里面读取数据,统计各项的数量及位置,原表是



统计后是这样,





其实只需统计,

比如某某教室桌子几张 椅子几把等等


具体代码

# -*- coding: utf-8 -*-
import os,shutil as s
import xlrd
xlsfile = u'外院总资产(2011[1][1].4.28导出).xls'
'''
名称 4
规格 6
位置 24
'''
data = xlrd.open_workbook(xlsfile)
table1 = data.sheets()[0]
t1name = table1.col_values(4)

#设备
names = {}
n=-1
for i in t1name:
    n+=1 
    location = table1.cell(n,24).value
    specification = table1.cell(n,6).value
    a=i+' '+location    
    if a not in names:
        names[a]=[location,specification,1]
    else:
        names[a][-1]+=1

file = open(u'设备.txt','w')
for item in names:
    file.write(item.encode('UTF-8')+',  '+names[item][1].encode('UTF-8')+',  '+str(names[item][-1])+'\n')

file.close()


遇到的问题:


刚开始写的,在求location和specification时获取'i'的编号是用的是location = table1.cell(t1name.index(i),24).value,“ t1name.index(i) ” 结果发现生成文件的项目顺序和文件不一致,我把代码看了好几遍,仍然百思不得其解,只好用pyscripter调试,不过也没得出个所以然。只好一点点的打印中间值,发现得到值就有问题。后来想明白了, 因为某一个值不是唯一的,比如桌子,很多教室都有,在表格中的顺序是不连续的,t1name.index(i)得到的不一定是指定的那个值得序数,后来换成了用n表示序数,问题迎刃而解,这让我想起了python八荣八耻中的:


以打印日志为荣 , 以单步跟踪为耻;





呵呵,挺有道理的~

2011-05-04 20:11129