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()
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文件和程序放在同一个文件夹下,稍等片刻,执行完毕!源文件及安装包