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文档。

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

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

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)

作者:雨天

地址:http://www.cnblogs.com/HelloGalaxy/p/8863436.html

Python处理Excel生成CSV文档的更多相关文章

  1. Python 处理EXCEL的CSV文档分列求SUM

    相对于导出EXCEL文件,PYTHON计算更为实时. import csv import sys from optparse import OptionParser def calculate_pro ...

  2. python 3.7 生成数据库文档

    开发阶段数据库总是有变动,开发人员需要维护文档给相关人员使用,故编写一个脚本自动生成数据库文档 生成的excel如下 import cx_Oracle import os from openpyxl ...

  3. Python处理Excel和PDF文档

    一.使用Python操作Excel Python来操作Excel文档以及如何利用Python语言的函数和表达式操纵Excel文档中的数据. 虽然微软公司本身提供了一些函数,我们可以使用这些函数操作Ex ...

  4. 利用sphinx为python项目生成API文档

    sphinx可以根据python的注释生成可以查找的api文档,简单记录了下步骤 1:安装 pip install -U Sphinx 2:在需要生成文档的.py文件目录下执行sphinx-apido ...

  5. python快速生成注释文档的方法

    python快速生成注释文档的方法 今天将告诉大家一个简单平时只要注意的小细节,就可以轻松生成注释文档,也可以检查我们写的类方法引用名称是否重复有问题等.一看别人专业的大牛们写的文档多牛多羡慕,不用担 ...

  6. 使用C#动态生成Word文档/Excel文档的程序测试通过后,部署到IIS服务器上,不能正常使用的问题解决方案

    使用C#动态生成Word文档/Excel文档的程序功能调试.测试通过后,部署到服务器上,不能正常使用的问题解决方案: 原因: 可能asp.net程序或iis访问excel组件时权限不够(Ps:Syst ...

  7. Python sphinx-build在Windows系统中生成Html文档

    看到前同事发布的“Markdown/reST 文档发布流水线”基于TFS.Docker.Azure等工具和平台进行文档发布的介绍说明,不得不在心中暗暗竖起大拇指.这套模式,实现了文档编写后版本管理.发 ...

  8. 使用sphinx快速为你python注释生成API文档

    sphinx简介sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发.新版的Python3文档就是由sphinx生成的, ...

  9. JSP生成WORD文档,EXCEL文档及PDF文档的方法

    转自:https://www.jb51.net/article/73528.htm 本文实例讲述了JSP生成WORD文档,EXCEL文档及PDF文档的方法.分享给大家供大家参考,具体如下: 在web- ...

随机推荐

  1. 【Python】 html解析BeautifulSoup

    BeautifulSoup bs是个html解析模块,常用来做爬虫? ■ 安装 BeautifulSoup可以通过pip来安装,用pip install beautifulsoup4 即可.但是仅仅这 ...

  2. python web开发-flask中sqlalchemy的使用

    SqlAlchemy是一个python的ORM框架. 在flask中有一个flask-sqlalchemy的扩展,使用起来很方便. 1.       创建一个sqlalchemy的Model模块 创建 ...

  3. C#添加背景音乐

    <MediaElement Name="audio"/> <Button Name="music" Content="点我有音乐哦& ...

  4. [高级软件工程教学]团队Beta阶段成绩汇总

    一.作业地址: https://edu.cnblogs.com/campus/fzu/AdvancedSoftwareEngineering/homework/1501 二.Beta冲刺课堂答辩 1. ...

  5. alpha-咸鱼冲刺day5-紫仪

    总汇链接 一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 !!!QAQ可以做到跟数据库交互了!!!!先来撒花花!(然后继续甲板) 四,问题困难   日常啥都不会,百度真心玩一年 ...

  6. alpha-咸鱼冲刺day3

    一,合照 emmmmm.自然还是没有的. 二,项目燃尽图 三,项目进展 今天把数据库的表给建好了,学长那边把登陆跟注册页面也做好了(纯页面,html5+css的那种) 四,问题困难 日常啥都不会,百度 ...

  7. ExecutorService实际上是一个线程池的管理工具

    在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用 Thread的start()更好.在新特征 ...

  8. php函数var_dump() 、print_r()、echo()

    var_dump() 能打印出类型 print_r() 只能打出值 echo() 是正常输出... 需要精确调试的时候用 var_dump(); 一般查看的时候用 print_r() 另外 , ech ...

  9. Web Api 使用模型验证

    public class Person { public int Id { get; set; } [Required(ErrorMessage = "姓名不能为空啊啊啊!")] ...

  10. c# aynsc 和 await

      static void Main(string[] args) { Print(); Console.WriteLine("这是主线程"); } public static a ...