Python处理Excel生成CSV文档
Python是一种解释型的、动态数据类型的、面向对象的高级程序设计语言。拥有丰富的处理数据和文本类库,并且得益于它是一种解释型的语言,在程序修改和功能扩展上,可以很容易做到大规模的调整。综合考虑Python的动态、轻量化特性,使用Python来处理Excel自动生成CSV文档的操作。 程序的运行需要依赖两个Python的类库,Pandas和Xlrd。Pandas是Python的一个数据分析类库。Xlrd则是帮助开发人员从Microsoft的Excel操作数据的好帮手。
至于为什么要把Excel变成CSV就很简单了。由于CSV基于“,”符号切割字符串表单,因此,在程序上,读写访问非常方便。不需要导入厚重的Excel类库,只需要基于string数据结构就可以实现基本的表单管理。
一.Python和相关依赖库的配置步骤
1. 安装Python
请到Python官网下载并安装Python运行时:https://www.python.org/downloads/
2. 安装成功后,请打开Cmd控制台,输入如下命令安装Pandas
pip install pandas
3. 接着输入如下命令安装Xlrd
pip install xlrd
4. 如果你使用PyCharm,那么该工程的引用库安装导入方式如下:
File -> Settings -> Project: [current project name] -> ProjectInterpreter -> +(Add Button) -> 弹出的搜索框里分别依次选中Pandas和Xlrd。
二.转换实现
在开始编码前,我们思考一下转换的流程:
先收集所有的Excel文件 -> 遍历每一个Excel文件 -> Excel文件中还有众多的Sheet组成,也要遍历他们 -> 最终把Sheet为单位生成独立的CSV文件
那么接下来就是要研究那些API可以帮忙我们,如何获取目录文件集,如何打开excel文档,如何遍历sheet,如何保存成csv文档等等。这里就不流水账罗列过程了,直接贴出成品代码,下面的代码是上述思考过程的最终成品。最后,我们启动PyCharm运行脚本,显然当前脚本很好的搜索的指定的目录,并把所有表格的Sheet生成对应的CSV文档。
import os import math import xlrd import pandas as pd def get_all_table_file_name(folder_path): table_names = [] for file in os.listdir(folder_path): if os.path.splitext(file)[1] == '.xls' or os.path.splitext(file)[1] == '.xlsx': table_names.append(file) return table_names def foreach_cell(cell): if type(cell) is float and math.isnan(cell): cell = 0 return cell def convert_table_to_csv(folder_path, file_name): file_path = folder_path + '/' + file_name print('开始转换Excel文档: ' + file_path + ' 成 CSV 文档') tables = xlrd.open_workbook(file_path) print('..Sheet总数: ' + tables.nsheets.__str__()) for sheet_table in tables.sheets(): csv_file_name = file_name.replace('.xlsx', '') csv_file_name = csv_file_name.replace('.xls', '') output_path = 'output/' + csv_file_name + sheet_table.name + ".csv" sheet = pd.read_excel(file_path, sheet_table.name, index_col=None, index=False) sheet.columns = sheet.columns.str.replace('Unnamed.*', '') sheet.applymap(foreach_cell) sheet.to_csv(output_path, encoding='utf-8', index=False) print('....已经生成 ' + csv_file_name + sheet_table.name + ' CSV文档') def convert_all_tables_to_csv(folder_paths): for folder_path in folder_paths: table_files = get_all_table_file_name(folder_path) for table_file in table_files: convert_table_to_csv(folder_path, table_file) scan_folders = ['.', 'tables'] convert_all_tables_to_csv(scan_folders)
作者:雨天