作者:黄伟
来源:杰哥的IT之旅(ID:Jake_Internet)
转载请联系授权(WeChat ID:Hc220066)

一、相关知识点讲解
1、需要使用的相关库

1import numpy as np2import pandas as pd3import os

2、os.walk(pwd)
图片
举例如下
① 先来看看"G:\a"文件夹下有哪些东西。


② 代码操作如下:

1pwd = "G:\\a"2print(os.walk(pwd))3for i in os.walk(pwd):4    print(i)5for path,dirs,files in os.walk(pwd):6    print(files)

③ 结果如下:

1<generator object walk at 0x0000029BB5AEAB88>2('G:\\a', [], ['aa.txt', 'bb.xlsx', 'cc.txt', 'dd.docx'])3['aa.txt', 'bb.xlsx', 'cc.txt', 'dd.docx']

3、os.path.join(path1,path2…)
作用:将多个路径组合后返回

举例如下

1path1 = 'G:\\a'2path2 = 'aa.txt'3print(os.path.join(path1,path2))

结果如下:

1G:\a\aa.txt


4、案例解析


举例如下:

1pwd = "G:\\a"2file_path_list = []3for path,dirs,files in os.walk(pwd):4    for file in files:5        file_path_list.append(os.path.join(pwd,file))6print(file_path_list)

结果如下:

1['G:\\a\\aa.txt','G:\\a\\bb.xlsx','G:\\a\\cc.txt','G:\\a\\dd.docx']

5、怎么在一个列表中存放多个DataFrame数据。

1# 先使用如下代码创建两个DataFrame数据源。2import numpy as np3xx = np.arange(15).reshape(5,3)4yy = np.arange(1,16).reshape(5,3)5xx = pd.DataFrame(xx,columns=["语文","数学","外语"])6yy = pd.DataFrame(yy,columns=["语文","数学","外语"])7print(xx)8print(yy)

结果如下:

怎么讲上述两个DataFrame拼接在一起?

 1concat_list = [] 2concat_list.append(xx) 3concat_list.append(yy) 4# pd.concat(list)中【默认axis=0】默认的是数据的纵向合并。 5# pd.concat(list)括号中传入的是一个DataFrame列表。 6# ignore_list=True表示忽略原有索引,重新生成一组新的索引。 7z = pd.concat(concat_list,ignore_list=True) 8print(z) 910# 或者直接可以写成z = pd.concat([xx,yy],ignore_list=True)

结果如下:


二、多工作簿合并(一)
1、将多个Excel合并到一个Excel中(每个Excel中只有一个sheet表)

操作如下:

 1import pandas as pd 2import os 3pwd = "G:\\b" 4df_list = [] 5for path,dirs,files in os.walk(pwd): 6    for file in files: 7        file_path = os.path.join(path,file)                         8        df = pd.read_excel(file_path)  9        df_list.append(df)10result = pd.concat(df_list)11print(result)12result.to_excel('G:\\b\\result.xlsx',index=False)

结果如下:


三、多工作簿合并(二)
1、相关知识点讲解
xlsxwrite的用法

 11)创建一个"工作簿",此时里面会默认生成一个名叫"Sheet1"的Sheet表。 2import xlsxwriter 3# 这一步相当于创建了一个新的"工作簿"; 4# "demo.xlsx"文件不存在,表示新建"工作簿"; 5# "demo.xlsx"文件存在,表示新建"工作簿"覆盖原有的"工作簿"; 6workbook = xlsxwriter.Workbook("demo.xlsx") 7# close是将"工作簿"保存关闭,这一步必须有。否则创建的文件无法显示出来。 8workbook.close()   92)创建一个"工作簿"并添加一个"工作表",工作表命名为"2018年销量"。10import xlsxwriter11workbook = xlsxwriter.Workbook("cc.xlsx")12worksheet = workbook.add_worksheet("2018年销售量")13workbook.close()   

结果如下:

 13)给"2018年销售量"工作表创建一个表头,向其中插入一条数据。 2import xlsxwriter 3# 创建一个名为【demo.xlsx】工作簿; 4workbook = xlsxwriter.Workbook("demo.xlsx") 5# 创建一个名为【2018年销售量】工作表; 6worksheet = workbook.add_worksheet("2018年销售量") 7# 使用write_row方法,为【2018年销售量】工作表,添加一个表头; 8headings = ['产品','销量',"单价"]  9worksheet.write_row('A1',headings)10# 使用write方法,在【2018年销售量】工作表中插入一条数据;11# write语法格式:worksheet.write(行,列,数据) 12data = ["苹果",500,8.9]13for i in range(len(headings)):14    worksheet.write(1,i,data[i]) 15workbook.close()

结果如下:


其他用法可以参考:https://www.cnblogs.com/brightbrother/p/8671077.html

xlrd的用法

 11)打开某一个存在的excel文件,返回给我们"xlrd.book.Book"工作簿对象; 2# 这里所说的"打开"并不是实际意义上的打开,只是将该表加载到内存中打开。 3# 我们并看不到"打开的这个效果" 4# 以打开上述创建的"test.xlsx"文件为例; 5import xlrd  6file = r"G:\Jupyter\test.xlsx" 7xlrd.open_workbook(file) 8# 结果如下: 9<xlrd.book.Book at 0x29bb8e4eda0>10112)sheet_names():获取所有的sheet表表名,假如有多个sheet表,返回一个列表;12import xlrd13file = r"G:\Jupyter\test.xlsx"14fh = xlrd.open_workbook(file)15fh.sheet_names()16# 结果如下:17['2018年销售量', '2019年销售量']18193)sheets()方法:返回的是sheet表的对象列表。20# 返回sheet表的对象列表21fh.sheets()22# 结果如下:23[<xlrd.sheet.Sheet at 0x29bb8f07a90>, <xlrd.sheet.Sheet at 0x29bb8ef1390>]2425# 可以利用索引,获取每一个sheet表的对象26fh.sheets()[0]27结果是:<xlrd.sheet.Sheet at 0x29bb8f07a90>28fh.sheets()[1]29结果是:<xlrd.sheet.Sheet at 0x29bb8ef1390>30314)返回每一个sheet表的行数(nrows) 和 列数(ncols);32# 我们可以利用上述创建的sheet表对象,对每一个sheet表进行操作;33fh.sheets()[0].nrows  # 结果是:434fh.sheets()[0].ncols  # 结果是:335365)row_values(行数):获取每一个sheet表中每一行的数据;37sheet1 = fh.sheets()[0]38for row in range(fh.sheets()[0].nrows):39   value = sheet1.row_values(row)40   print(value)

结果如下:

16)col_values(列数):获取每一个sheet表中每一列的数据;2sheet1 = fh.sheets()[0]3for col in range(fh.sheets()[0].ncols):4   value = sheet1.col_values(col)5   print(value)

结果如下:

2、将多个Excel合并到一个Excel中(每个Excel中不只一个sheet表)

 1import xlrd 2import xlsxwriter 3import os 4 5# 打开一个Excel文件,创建一个工作簿对象 6def open_xlsx(file): 7    fh=xlrd.open_workbook(file) 8    return fh 910# 获取sheet表的个数11def get_sheet_num(fh):12    x = len(fh.sheets())13    return x1415# 读取文件内容并返回行内容16def get_file_content(file,shnum):17    fh=open_xlsx(file)18    table=fh.sheets()[shnum]19    num=table.nrows20    for row in range(num):21        rdata=table.row_values(row)22        datavalue.append(rdata)23    return datavalue2425def get_allxls(pwd):26    allxls = []27    for path,dirs,files in os.walk(pwd):28        for file in files:29            allxls.append(os.path.join(path,file))30    return allxls3132# 存储所有读取的结果33datavalue = []  34pwd = "G:\\d"                          35for fl in get_allxls(pwd):36    fh = open_xlsx(fl)     37    x = get_sheet_num(fh)  38    for shnum in range(x):39        print("正在读取文件:"+str(fl)+"的第"+str(shnum)+"个sheet表的内容...")40        rvalue = get_file_content(fl,shnum)   4142# 定义最终合并后生成的新文件43endfile = "G:\\d\\concat.xlsx"44wb1=xlsxwriter.Workbook(endfile)45# 创建一个sheet工作对象46ws=wb1.add_worksheet()47for a in range(len(rvalue)):48    for b in range(len(rvalue[a])):49        c=rvalue[a][b]50        ws.write(a,b,c)51wb1.close()52print("文件合并完成")

【将上述代码封装后如下】

 1import xlrd 2import xlsxwriter 3import os 4 5class Xlrd(): 6    def __init__(self,pwd): 7        self.datavalue = []  8        self.pwd = pwd  910    # 打开一个Excel文件,创建一个工作簿对象;11    def open_xlsx(self,fl):12        fh=xlrd.open_workbook(fl)13        return fh1415    # 获取sheet表的个数;16    def get_sheet_num(self,fh):17        x = len(fh.sheets())18        return x1920    # 读取不同工作簿中每一个sheet中的内容,并返回每行内容组成的列表;21    def get_file_content(self,file,shnum):22        fh = self.open_xlsx(file)23        table=fh.sheets()[shnum]24        num=table.nrows25        for row in range(num):26            rdata=table.row_values(row)27            # 因为每一个sheet表都有一个表头;28            # 这里的判断语句,把这个表头去除掉;29            # 然后在最后写入数据的,添加上一个表头,即可;30            if rdata == ['姓名','性别','年龄','家庭住址']:31                pass32            else:33                self.datavalue.append(rdata)34        return self.datavalue3536    # 获取xlsx文件的全路径;37    def get_allxls(self):38        allxls = []39        for path,dirs,files in os.walk(self.pwd):40            for file in files:41                allxls.append(os.path.join(path,file))42        return allxls4344    # 返回不同工作簿中,所有的sheet表的内容列表;45    def return_rvalue(self):46        for fl in self.get_allxls():47            fh = self.open_xlsx(fl)     48            x = self.get_sheet_num(fh)  49            for shnum in range(x):50                print("正在读取文件:"+str(fl)+"的第"+str(shnum)+"个sheet表的内容...")51                rvalue = self.get_file_content(fl,shnum)  52        return rvalue5354class Xlsxwriter():55    def __init__(self,endfile,rvalue):56        self.endfile = endfile57        self.rvalue = rvalue5859    def save_data(self):60        wb1 = xlsxwriter.Workbook(endfile)61        # 创建一个sheet工作对象;62        ws = wb1.add_worksheet("一年级(7)班")63        # 给文件添加表头;64        ws = wb1.add_worksheet("2018年销售量")65        headings = ['姓名','性别','年龄','家庭住址'] 66        for a in range(len(self.rvalue)):67            for b in range(len(self.rvalue[a])):68                c = self.rvalue[a][b]69                # 因为给文件添加了表头,因此,数据从下一行开始写入;70                ws.write(a+1,b,c)71        wb1.close()72        print("文件合并完成")   7374pwd = "G:\\d"75xl = Xlrd(pwd)76rvalue = xl.return_rvalue()77endfile = "G:\\d\\concat.xlsx"78write = Xlsxwriter(endfile,rvalue)79write.save_data();

结果如下:


四、一个工作簿多sheet表合并。
1、将一个Excel表中的多个sheet表合并,并保存到同一个excel。

 1import xlrd 2import pandas as pd 3from pandas import DataFrame 4from openpyxl import load_workbook 5 6excel_name = r"D:\pp.xlsx" 7wb = xlrd.open_workbook(excel_name) 8sheets = wb.sheet_names() 910alldata = DataFrame()11for i in range(len(sheets)):12    df = pd.read_excel(excel_name, sheet_name=i, index=False, encoding='utf8')13    alldata = alldata.append(df)       1415writer = pd.ExcelWriter(r"C:\Users\Administrator\Desktop\score.xlsx",engine='openpyxl')16book = load_workbook(writer.path)17writer.book = book  18# 必须要有上面这两行,假如没有这两行,则会删去其余的sheet表,只保留最终合并的sheet表1920alldata.to_excel(excel_writer=writer,sheet_name="ALLDATA")21writer.save()22writer.close()

结果如下:


五、一表拆分(按照表中某一列进行拆分)
1、将一个Excel表,按某一列拆分成多张表。

 1import pandas as pd 2import xlsxwriter 3data=pd.read_excel(r"C:\Users\Administrator\Desktop\chaifen.xlsx",encoding='gbk') 4 5area_list=list(set(data['店铺'])) 6 7writer=pd.ExcelWriter(r"C:\Users\Administrator\Desktop\拆好的表1.xlsx",engine='xlsxwriter') 8data.to_excel(writer,sheet_name="总表",index=False) 910for j in area_list:11    df=data[data['店铺']==j]12    df.to_excel(writer,sheet_name=j,index=False)1314writer.save()  #一定要加上这句代码,“拆好的表”才会显示出来

结果如下:

©著作权归作者所有:来自51CTO博客作者mb5fe55acf14b1a的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Intent 的工作机制
  2. Android的消息机制之ThreadLocal的工作原理
  3. Android(安卓)OTA功能的实现和修改
  4. Android(安卓)studio 错误提示,英文转中文
  5. 原生Android何去何从
  6. 深入理解Android(5)——从MediaScanner分析Android中的JNI
  7. Android准备工作
  8. Android(安卓)中读取Excel文件实例详解
  9. android ---Using java surface on the native side

随机推荐

  1. Mac 下完全卸载Android Studio 和SDK
  2. android apache HTTP demo 互联网访问
  3. Ubuntu编译Android整个系统以及编译指定
  4. android 闪光灯控制
  5. Android中使用Intent实现界面跳转
  6. 【移动开发】Android中各种xml汇总
  7. 关于android.R.id.text1
  8. android界面开发小结——android笔记---
  9. Android Studio解决plugin with id 'andr
  10. 动态绘制CheckedTextView