美文网首页
python读写excel(附上将一个文件夹下所有excel文件

python读写excel(附上将一个文件夹下所有excel文件

作者: 裂开的汤圆 | 来源:发表于2019-05-28 06:37 被阅读0次

    xlrd读取excel文件

    不知道sheet是什么的可以看下图,红圈的两个框框就是一个excel文件下的两个sheet。该excel文件下第一个sheet是info


    111.png
    import xlrd
    excel = xlrd.open_workbook(f)
    #通过索引顺序获取
    sheet = data.sheets()[0]          
    # 通过索引获取sheet,这里是获取第一个sheet
    sheet = excel.sheet_by_index(0)
    #通过名称获取
    sheet = data.sheet_by_name(u'Sheet1')
    
    
    # 获取总行数
    sheet.nrows
    # 获取总列数
    sheet.ncols
    
    
    # 获取第0行的值,返回一个列表
    table.row_values(0)
    # 获取第0列的值,返回一个列表
    table.col_values(0)
    

    xlwt写入excel文件

    # import xlwt
    excel = xlwt.Workbook()
    # 为excel文件新增一个sheet
    sheet = a.add_sheet('sheet1', cell_overwrite_ok=True)
    # 写入数据,row行,col列,value列
    row = 1
    col = 1
    value = 'hello world'
    sheet.write(row, col, value)
    # 保存excel文件
    file_name = 'test.xls'
    a.save(file_name)
    
    

    xlutils写入excel

    from xlutils.copy import copy
    
    old = xlrd.open_workbook(file_name)
    # copy一份excel文件
    newExcel = copy(old)
    # 获取sheet
    sheet = newExcel.get_sheet(0)
    # 写入数据,row行,col列,value需要写入的值
    sheet.write(row, col, value)
    # 保存excel文件,文件名为file_name
    newExcel.save(file_name)
    

    首先看看合并的结果

    需要合并的文件夹下的所有excel文件以及内容


    需要合并的文件夹下的所有excel文件以及内容

    合并结果


    在这里插入图片描述

    合并同一个文件夹下的excel文件(代码)

    # coding:utf-8
    
    import xlrd
    import os
    import xlwt
    from xlutils.copy import copy
    
    """
    将文件夹下所有excel文件合并成一个文件
    注意:
        本代码仅支持合并excel文件第一个sheet,如果合并的excel文件有多个sheet,只会读取和合并第一个sheet,
        需要合并的excel文件如果有多个sheet需要修改代码的merge_excel()函数
    思路:
        1.获取路径下所有文件,注意 本代码没有异常处理
        2.新建一个excel文件,用于存储全部数据
        3.逐个打开需要合并的excel文件,逐行读取数据,再用一个列表来保存每行数据。最后该列表中会存储所有的数据
        4.向excel文件中逐行写入
    """
    
    
    def get_allfile_msg(file_dir):
        for root, dirs, files in os.walk(file_dir):
            '''
            print(root) #当前目录路径  
            print(dirs) #当前路径下所有子目录  
            print(files) #当前路径下所有非目录子文件 
            '''
            return root, dirs, [file for file in files if file.endswith('.xls') or file.endswith('.xlsx')]
    
    
    def get_allfile_url(root, files):
        """
        将目录的路径加上'/'和文件名,组成文件的路径
        :param root: 路径
        :param files: 文件名称集合
        :return: none
        """
        allFile_url = []
        for file_name in files:
            file_url = root + '/' + file_name
            allFile_url.append(file_url)
        return allFile_url
    
    
    def all_to_one(root, allFile_url, file_name='allExcel.xls', title=None, have_title=True):
        """
        合并文件
        :param root: 输出文件的路径
        :param allFile_url: 保存了所有excel文件路径的集合
        :param file_name: 输出文件的文件名
        :param title: excel表格的表头
        :param have_title: 是否存在title(bool类型),默认为true,不读取excel文件的第0行
        :return: none
        """
        # 首先在该目录下创建一个excel文件,用于存储所有excel文件的数据
        file_name = root + '/' + file_name
        create_excel(file_name, title)
    
        list_row_data = []
        for f in allFile_url:
            # 打开excel文件
            print('打开%s文件' % f)
            excel = xlrd.open_workbook(f)
            # 根据索引获取sheet,这里是获取第一个sheet
            table = excel.sheet_by_index(0)
            print('该文件行数为:%d,列数为:%d' % (table.nrows, table.ncols))
    
            # 获取excel文件所有的行
            for i in range(table.nrows):
                # 如果存在表头,则跳过第0行,否则不跳过
                if have_title and i == 0:
                    continue
                else:
                    row = table.row_values(i)  # 获取整行的值,返回列表
                    list_row_data.append(row)
    
        print('总数据量为%d' % len(list_row_data))
        # 写入all文件
        add_row(list_row_data, file_name)
    
    
    # 创建文件名为file_name,表头为title的excel文件
    def create_excel(file_name, title):
        print('创建文件%s' % file_name)
        a = xlwt.Workbook()
        # 新建一个sheet
        table = a.add_sheet('sheet1', cell_overwrite_ok=True)
        # 写入数据
        for i in range(len(title)):
            table.write(0, i, title[i])
        a.save(file_name)
    
    
    # 向文件中添加n行数据
    def add_row(list_row_data, file_name):
        # 打开excel文件
        allExcel1 = xlrd.open_workbook(file_name)
        sheet = allExcel1.sheet_by_index(0)
        # copy一份文件,准备向它添加内容
        allExcel2 = copy(allExcel1)
        sheet2 = allExcel2.get_sheet(0)
    
        # 写入数据
        i = 1
        for row_data in list_row_data:
            for j in range(len(row_data)):
                sheet2.write(sheet.nrows + i, j, row_data[j])
            i += 1
        # 保存文件,将原文件覆盖
        allExcel2.save(file_name)
        print('合并完成')
    
    
    if __name__ == '__main__':
        # 设置文件夹路径,
        file_dir = 'D:\SoftWare\PythonWorkSpace\excel-test'
        # 获取文件夹的路径,该路径下的所有文件夹,以及所有文件
        root, dirs, files = get_allfile_msg(file_dir)
        # 拼凑目录路径+文件名,组成文件的路径,用一个列表存储
        allFile_url = get_allfile_url(root, files)
        # 设置文件名,用于保存数据
        file_name = 'output.xls'
        # 设置excle文件表头
        title = ['a', 'b', 'c', 'd']
        # have_title参数默认为True,为True时不读取excel文件的首行
        all_to_one(root, allFile_url, file_name=file_name, title=title, have_title=True)
    
    
    

    相关文章

      网友评论

          本文标题:python读写excel(附上将一个文件夹下所有excel文件

          本文链接:https://www.haomeiwen.com/subject/lliltctx.html