Table of Contents:
  1. baisc concept
    1. 为什么要转换?
      1. 功能实现
        1. 实现思路
          1. 代码实现
            1. xlsxwriter应用说明

            csv转xlsx

            Reading Time:The full text has 656 words, estimated reading time: 4 minutes
            Creation Date:2017-05-04
            Article Tags:
            Next Article:Scrapy阅读笔记
             
            BEGIN

            baisc concept

            1. csv file: full-name is Comma-separated values. 字面意思就是用逗号分隔文本的文件. 由于非常适合用于二次开发,所以常流通与数据库导出.
            2. 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应用说明

            1. 实例化xlsx文件对象: xf = xlsxwriter.Workbook('file_name.xlsx')
            2. 在实例化的xlsx文件对象中创建工作谱: sheet1 = xf.add_worksheet('sheet_name')
            3. 写入文本(i,j表示第i行第j列): sheet1.write(i, j, 'data')
            4. 结束写入更改并提交创建文件: xf.close()
            5. xlswriter模块还可用于基于excel文件报表生成等特殊office需求.
            FINISH
            Next Article:Scrapy阅读笔记

            Random Articles
            Life Countdown
            default