自由与蓝天

昔日高山流水,快剑江湖,长街奔马。 今日谷歌百度,种菜发贴,写写代码。

博客园 首页 新随笔 联系 订阅 管理

        CSV逗点文件是个容易控制的文件,而且比较小,打开方便,经常会用到。比如用大量数据批量导入数据库,或者GPS记录的大量坐标文件的后处理。

       如果你有大量的Excel文件,如何省时省力的将他们转化成CSV文件呢?

       一个个另存为?当然如果你愿意这么做。可以的。

       使用网上下载的xls2csv?你就一个个往里边拖吧。而且出来的结果还带引号。

       也有其它方法,比如使用 pywin32通过WinCOM来操作Excel表格,或者使用xlrd。
       不过,我觉得,倘若你用PyExcelerator和Python就完全可以KO这个问题。    
       PyExcelerator的官方主页是http://sourceforge.net/projects/pyexcelerator

       好处是,不需要WinCOM支持,没装Office也 可以生成Excel表格。

       首先,你要下载安装这个python的包,安装方法是 python setup.py install

       代码如下:

      

 

 1 #! /usr/bin/env python
 2 #coding=utf-8
 3 #writer:parming    Email:ming5536@163.com
 4 from pyExcelerator import *
 5 import sys
 6 import glob
 7 class batxls2csv:
 8     def __init__(self):
 9                 pass
10     def savecsv1(self,arg):
11         matrixgolb = []
12         for sheet_name, values in parse_xls(arg, 'cp1251'): # parse_xls(arg) -- default encoding
13             matrix = [[]]
14             for row_idx, col_idx in sorted(values.keys()):
15                 #print row_idx,col_idx
16                 #print matrix
17                 v = values[(row_idx, col_idx)]
18                 if isinstance(v, unicode):
19                     v = v.encode('cp866''backslashreplace')
20                 else:
21                     v = str(v)
22                 last_row, last_col = len(matrix), len(matrix[-1])
23                 #下一行修改过
24                 while last_row <=row_idx:
25                     matrix.extend([[]])
26                     last_row = len(matrix)
27                 
28                 while last_col < col_idx:
29                     matrix[-1].extend([''])
30                     last_col = len(matrix[-1])
31                 
32                 matrix[-1].extend([v])
33             for row in matrix:
34                  csv_row = ','.join(row)
35                  matrixgolb.append(csv_row)
36         return matrixgolb        
37         print  matrixgolb
38     def savecsv2(self):
39         
40         filelist = glob.glob("*.xls")
41         for filenam in filelist:
42             matrixgolb=self.savecsv1(filenam)
43             namecsv=filenam[:-4]+'.csv'
44             file_object = open(namecsv, 'w+')
45             for item in matrixgolb:
46                 file_object.write(item)
47                 file_object.write('\n')
48             file_object.close( )
49             
50 if __name__ == "__main__":
51     test=batxls2csv()
52     test.savecsv2()

 

       其实下载的包中也有些小例子,我对其做了一些修改。不过这个例子只适合excel中只有一个表单Sheet1的情况。把所有的excel文件和程序放在同一个文件夹下,稍等片刻,执行完毕!源文件及安装包

 


 

 

  

posted on 2011-09-19 17:23  自由与蓝天  阅读(4678)  评论(0编辑  收藏  举报