python生成csv_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

131751-20180417125032393-1292512965.png

3. 接着输入如下命令安装Xlrd

pip install xlrd

131751-20180417125130046-906170996.png

4. 如果你使用PyCharm,那么该工程的引用库安装导入方式如下:

File -> Settings -> Project: [current project name] -> ProjectInterpreter -> +(Add Button) -> 弹出的搜索框里分别依次选中Pandas和Xlrd。

131751-20180417125258375-1768799064.png

二.转换实现

在开始编码前,我们思考一下转换的流程:

先收集所有的Excel文件->遍历每一个Excel文件-> Excel文件中还有众多的Sheet组成,也要遍历他们->最终把Sheet为单位生成独立的CSV文件

那么接下来就是要研究那些API可以帮忙我们,如何获取目录文件集,如何打开excel文档,如何遍历sheet,如何保存成csv文档等等。这里就不流水账罗列过程了,直接贴出成品代码,下面的代码是上述思考过程的最终成品。最后,我们启动PyCharm运行脚本,显然当前脚本很好的搜索的指定的目录,并把所有表格的Sheet生成对应的CSV文档。

对了,代码里面我还留一个彩蛋,如何遍历所有的表格单元。这个,可以很好的帮你处理非法的单元格数据,关键的代码就是调用dataframe的applymap方法。代码中示例输入的方法是foreach_cell,该方法的本体是将nan的数据变成0。

另外,你还会发现,我用了xlrd获取sheet列表,但是我又另外使用pandas打开对应sheet。我之所以这样做,只是觉得pandas生成csv方便。所以,绕了点弯路。但是无大碍,一个转换代码而已,起码能利用各个优点(不是借口的借口吧)。Pandas有一个悲剧的地方就是不能获取Excel的Sheet总体情况,不传入指定的Sheet,默认打开的是第一个Sheet。

importosimportmathimportxlrdimportpandas as pddefget_all_table_file_name(folder_path):

table_names=[]for file inos.listdir(folder_path):if os.path.splitext(file)[1] == '.xls' or os.path.splitext(file)[1] == '.xlsx':

table_names.append(file)returntable_namesdefforeach_cell(cell):if type(cell) is float andmath.isnan(cell):

cell=0returncelldefconvert_table_to_csv(folder_path, file_name):

file_path= folder_path + '/' +file_nameprint('开始转换Excel文档:' + file_path + '成 CSV 文档')

tables=xlrd.open_workbook(file_path)print('..Sheet总数:' + tables.nsheets.__str__())for sheet_table intables.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文档')defconvert_all_tables_to_csv(folder_paths):for folder_path infolder_paths:

table_files=get_all_table_file_name(folder_path)for table_file intable_files:

convert_table_to_csv(folder_path, table_file)

scan_folders= ['.', 'tables']

convert_all_tables_to_csv(scan_folders)

131751-20180417125343117-1443216389.png

131751-20180417125411552-959996933.png

作者:雨天

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值