csv转xlsx
閱讀時間:全文 656 字,預估用時 4 分鐘
創作日期:2017-05-04
上篇文章:连接pgsql报认证错误解决方法
下篇文章:Scrapy阅读笔记
BEGIN
baisc concept
- csv file: full-name is Comma-separated values. 字面意思就是用逗号分隔文本的文件. 由于非常适合用于二次开发,所以常流通与数据库导出.
- xls or xlsx: 这个应该不会陌生,excel的专用文件格式.
为什么要转换?
csv是简单的用逗号分隔值,对于交互开发非常方便,但是文件是给人用的话csv的这种设计方式就很不适合了,一旦文件过大就会出现软件无响应等一系列问题,会给普通用户非常差的体验,因此转换的根本缘由还是在于方便普通用户使用.
功能实现
实现思路
读取csv文件,循环遍历所有行,并一行一行通过xlsxwriter模块创建并写入xlsx文件中.
其中用于与excel文件交互的python模块有:读取(xlrd),写入(xlwt,xlsxwriter).
xlwt模块和xlsxwriter模块都可以用来创建excel文件并写入数据.区别在于xlwt文件创建的是office 2007之前版本通用的xls模式的excel文件,其中单个的sheet的最大行数上限为65535行,当大于这个上限时就会报错导致写入文件失败.反之xlsxwriter模块创建及写入的是office 2007及以后的版本的xlsx模式的excel文件.虽然也有行数上限,但足以应付99.99%的需求.
代码实现
# coding:utf-8
import xlsxwriter, os, re, sys
reload(sys)
sys.setdefaultencoding('utf8')
#FILE_PATH变量用于保存文件夹路径的集合
FILE_PATH = ['']
def transform(file_path, file_name):
name = file_name[0:len(file_name)-4].decode('utf-8')
#实例化文件对象
xf = xlsxwriter.Workbook(file_path + '/' + name + '.xlsx')
#添加工作谱
sheet1 = xf.add_worksheet(name)
with open(file_path + '/' + file_name) as f:
for index, line in enumerate(f):
#如果文件文本指定了编码格式时需要对其解码
line = line.decode('gbk')
a_txt = line[0:len(line)-1].split(',')
for i in range(0, len(a_txt)):
#对每个单元格进行数据填充
sheet1.write(index, i, a_txt[i])
xf.close()
'''此注释块为基于xlwt模块的实现
def transform(file_path, file_name):
name = file_name[0:len(file_name)-4].decode('utf-8')
xf = xlwt.Workbook(encoding='gbk')
sheet1 = xf.add_sheet(name, cell_overwrite_ok=True)
with open(file_path + '/' + file_name) as f:
for index, line in enumerate(f):
a_txt = line[0:len(line)-1].split(',')
for i in range(0, len(a_txt)):
sheet1.write(index, i, a_txt[i])
file_result = file_path + '/' + name + '.xlsx'
xf.save(file_result)
'''
if __name__ == '__main__':
for path in FILE_PATH:
for parent, dirnames, dirfiles in os.walk(path):
for dirfile in dirfiles:
if dirfile[-3:-1] + dirfile[-1] == 'csv':
transform(parent, dirfile)
xlsxwriter应用说明
- 实例化xlsx文件对象:
xf = xlsxwriter.Workbook('file_name.xlsx')
- 在实例化的xlsx文件对象中创建工作谱:
sheet1 = xf.add_worksheet('sheet_name')
- 写入文本(i,j表示第i行第j列):
sheet1.write(i, j, 'data')
- 结束写入更改并提交创建文件:
xf.close()
- xlswriter模块还可用于基于excel文件报表生成等特殊office需求.
FINISH
上篇文章:连接pgsql报认证错误解决方法
下篇文章:Scrapy阅读笔记