|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | + |
| 3 | +import os,sys,inspect,re |
| 4 | +import xdrlib,xlrd |
| 5 | + |
| 6 | +# 防止中文乱码 |
| 7 | +reload(sys) |
| 8 | +sys.setdefaultencoding("utf-8") |
| 9 | + |
| 10 | +#分割符 |
| 11 | +C_SPACE = "," |
| 12 | +#结束符 |
| 13 | +C_END = "\n" |
| 14 | +# 输入路径(存放xls文件的路径) |
| 15 | +IN_PATH = "" |
| 16 | +# 输出路径(导出csv文件的路径) |
| 17 | +OUT_PATH = "" |
| 18 | + |
| 19 | + |
| 20 | +# 读取配置文件 |
| 21 | +def read_config(): |
| 22 | + config_file = open("config.ini","r") |
| 23 | + cur_line = config_file.readline().rstrip("\r\n").split(',') |
| 24 | + global IN_PATH |
| 25 | + IN_PATH = cur_line[1] |
| 26 | + cur_line = config_file.readline().rstrip("\r\n").split(',') |
| 27 | + global OUT_PATH |
| 28 | + OUT_PATH = cur_line[1] |
| 29 | + |
| 30 | +# 过滤路径 |
| 31 | +def cur_file_dir(path): |
| 32 | + if os.path.isfile(path): |
| 33 | + path = os.path.dirname(path) |
| 34 | + print path |
| 35 | + return os.path.abspath(path) |
| 36 | + |
| 37 | +#搜索指定文件夹下面的文件 |
| 38 | +def find_file_by_pattern(pattern='.*', base=".", circle=True): |
| 39 | + # 查找给定文件夹下面所有 |
| 40 | + re_file = re.compile(pattern) |
| 41 | + if base == ".": |
| 42 | + base = cur_file_dir(IN_PATH) |
| 43 | + print u"开始搜索文件夹:",base |
| 44 | + |
| 45 | + final_file_list = [] |
| 46 | + cur_list = os.listdir(base) |
| 47 | + for item in cur_list: |
| 48 | + # print item |
| 49 | + if item == ".svn": |
| 50 | + continue |
| 51 | + # 拼接路径 |
| 52 | + full_path = os.path.join(base, item) |
| 53 | + # 忽略临时文件 |
| 54 | + if full_path.startswith("~"): |
| 55 | + continue |
| 56 | + # 筛选出xlsx\xls文件 |
| 57 | + if full_path.endswith(".xlsx") or full_path.endswith(".xls"): |
| 58 | + print u"输入文件:" + full_path |
| 59 | + bfile = os.path.isfile(item) |
| 60 | + if os.path.isfile(full_path): |
| 61 | + if re_file.search(full_path): |
| 62 | + final_file_list.append(full_path) |
| 63 | + else: |
| 64 | + final_file_list += find_file_by_pattern(pattern, full_path) |
| 65 | + |
| 66 | + # 返回文件列表 |
| 67 | + return final_file_list |
| 68 | + |
| 69 | + |
| 70 | +#打开excel |
| 71 | +def open_excel(file= 'file.xls'): |
| 72 | + try: |
| 73 | + data = xlrd.open_workbook(file) |
| 74 | + return data |
| 75 | + except Exception,e: |
| 76 | + print str(e) |
| 77 | + |
| 78 | + |
| 79 | +#根据索引获取Excel表格中的数据 参数:file:Excel文件路径, colnameindex:表头列名所在行的索引, by_index:表的索引 |
| 80 | +def excel_table_byindex(file='file.xls', colnameindex=0, by_index=0): |
| 81 | + data = open_excel(file) |
| 82 | + table = data.sheets()[by_index] |
| 83 | + nrows = table.nrows #行数 |
| 84 | + ncols = table.ncols #列数 |
| 85 | + rowlist = [] |
| 86 | + |
| 87 | + '''开始读取数据''' |
| 88 | + for rownum in range(colnameindex, nrows): |
| 89 | + rowdata = table.row_values(rownum) |
| 90 | + if rowdata: |
| 91 | + collist = [] |
| 92 | + for i in range(ncols): |
| 93 | + collist.append(rowdata[i]) |
| 94 | + rowlist.append(collist) |
| 95 | + return rowlist |
| 96 | + |
| 97 | +#保存csv文件 |
| 98 | +def savaToCSV(_file, _list, _path): |
| 99 | + filename = "" |
| 100 | + content = "" |
| 101 | + #生成文件内容 |
| 102 | + for collist in _list: |
| 103 | + for i in range(len(collist)): |
| 104 | + v = collist[i] |
| 105 | + vstr = "" |
| 106 | + # print k,v |
| 107 | + if isinstance(v, float) or isinstance(v, int): |
| 108 | + vstr = str(int(v)) |
| 109 | + else: |
| 110 | + vstr = v |
| 111 | + if i > 0: |
| 112 | + content = content + C_SPACE |
| 113 | + content = content + vstr |
| 114 | + content = content + C_END |
| 115 | + |
| 116 | + #生成文件后缀 |
| 117 | + fname = os.path.splitext(_file) |
| 118 | + filename = fname[0] + ".csv" |
| 119 | + |
| 120 | + #写文件 |
| 121 | + if len(filename)>0 and len(content)>0: |
| 122 | + #filename = OUT_PATH + "/" + filename |
| 123 | + print u"输出文件:" + filename |
| 124 | + file_object = open(filename, 'w') |
| 125 | + file_object.write(content) |
| 126 | + file_object.close() |
| 127 | + |
| 128 | + |
| 129 | +def main(): |
| 130 | + |
| 131 | + read_config() |
| 132 | + filelist = find_file_by_pattern() |
| 133 | + if len(filelist) > 0: |
| 134 | + path = "" |
| 135 | + #遍历文件生成csv |
| 136 | + for file in filelist: |
| 137 | + datalist = excel_table_byindex(file, 0) |
| 138 | + if len(datalist)>0: |
| 139 | + savaToCSV(file, datalist, path) |
| 140 | + else: |
| 141 | + print u"没有找到任何excel文件!" |
| 142 | + |
| 143 | +if __name__=="__main__": |
| 144 | + main() |
0 commit comments