随笔-59  评论-36  文章-0  trackbacks-0
为帮助他人统计excel中的数据,我用python写了一个读写excel文件的脚本。
虽然最终功能实现了但是速度却很慢,处理一个7列,4K行数据的excel文件用了3分钟左右的时间,后来了解到是我把接口用错了。

脚本在读取excel文件时是以 行 为单位读取的,而我在实现读取整行时是一个单元格一个单元格的读取,然后将这些单元格在拼成一行,如下面代码:
ValidRowCount = self.m_xlsSheet.UsedRange.Rows.Count
ValidColCount 
= self.m_xlsSheet.UsedRange.Columns.Count
indexRow 
= 1

while (indexRow <= ValidRowCount):

    indexCol 
= 1;
    rowData 
= [];

    
while indexCol <= ValidColCount:

        val 
= self.m_xlsSheet.Cells(indexRow , indexCol).Value

        
if val:
            rowData.append(val)
        
else:
            rowData.append(
'')

        indexCol 
+= 1;

后来了解到可以通过Sheets.Range 一次性读取一个区域的数据,于是代码改成了:
while (indexRow <= ValidRowCount):

    indexCol 
= 1;
    rowData 
= [];

    first 
= self.m_xlsSheet.Cells(indexRow , 1);
    end 
= self.m_xlsSheet.Cells(indexRow , ValidColCount);

    rowDatas 
= list(self.m_xlsSheet.Range(first , end).Value)

    indexCol 
+= 1

用修改后的再测了下,同样的文件只用了50秒左右,比原先的省了2/3的时间。
后来又增加了每次的读取亮,速度又快了不少。
posted on 2012-10-28 18:15 zhaoyg 阅读(396) 评论(0)  编辑 收藏 引用 所属分类: Python

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理