1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > python生成csv_Python处理Excel生成CSV文档

python生成csv_Python处理Excel生成CSV文档

时间:2019-08-08 14:03:26

相关推荐

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运行时:/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文档。

对了,代码里面我还留一个彩蛋,如何遍历所有的表格单元。这个,可以很好的帮你处理非法的单元格数据,关键的代码就是调用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)

作者:雨天

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。