龙空技术网

Python自动化办公|快速地批量处理Excel内容

小码农和农夫 2063

前言:

眼前兄弟们对“python处理多个文件”大约比较关心,小伙伴们都想要学习一些“python处理多个文件”的相关文章。那么小编也在网络上搜集了一些有关“python处理多个文件””的相关文章,希望咱们能喜欢,同学们快快来学习一下吧!

前言

Excel 是我们在工作和日常中使用频率很高,平时,我们对一个 Excel 文件中进行操作,手工进行很方便,但问题是,如果我们遇见需要同时操作多个 Excel 文件,就是一件非常耗时的事情了。你可能对每一个 Excel 文件都进行“打开 - 复制粘贴 - 保存”循环的机械工作。是不是感觉很枯燥和乏味呢?

今天我带大家学习下,如何用 Python 操作Excel进行批量合并和拆分。想了解快速的使用Python进行批量合并和拆分,那我们首先要知道如何用Python操作Excel文件,

如何用 Python 手工操作一个 Excel 文件?

一、导入excel表格文件处理函数

import xlwt

注意,这里的xlwt是python的第三方模块,需要下载安装才能使用。(python第三方库的安装也非常简单,打开命令行,输入pip install xxx就可以了

pip install xlrdpip install xlwt

其中,xlrd 库支持 Excel 读取,xlwt 库支持 Excel 写入。

二、创建excel表格类型文件

book = xlwt.Workbook(encoding='utf-8')

调用xlwt模块中的Workbook方法来创建一个excel表格类型文件,其中的第一个参数是设置数据的编码格式,这里是’utf-8’的形式。

三、在excel表格类型文件中建立一张sheet表单

sheet = book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True)

用book对象调用add_sheet方法来建立一张sheet表,这里面的第一个参数很明显就是设置sheet表格的名称,第二个参数cell_overwrite_ok用于确认同一个cell单元是否可以重设值,这里赋值为True就表示可重设值。

四、自定义列名

col = ('电影详情链接','图片链接','影片中文名','影片外国名','评分','评价数','概况','相关信息')

用一个元组col自定义列的数量以及各列的属性名,比如我这里是8列,列属性名有“电影详情链接”,“图片链接”等。

五、将列属性元组col写进sheet表单中

for i in range(0,8):  sheet.write(0,i,col[i])

很简单,用一个for循环将col元组的元组值(也就是列属性名)写入到sheet表单中。这里调用的是write方法,该方法的第一个参数是行、第二个参数是列、第三个当然就是col元组值。因为这里写进去的是列名,所以都是在第一行。

六、将数据写进sheet表单中

datalist = [['www','www图片','西游记','xiyouji','100分','0人','很好','超级棒'],['www2','www图片2','西游记2','xiyouji2','1000分','1人','很棒','一级棒']]for i in range(0,2):  data = datalist[i]  for j in range(0,8):      sheet.write(i+1,j,data[j])

把数据写进sheet表单里也很简单,先用一个for进行每行写入,在每一行中用第二个for循环把每一行当中的列值写进去。

七、保存excel文件

savepath = 'excel表格.xls'book.save(savepath)

只需要调用save方法即可保存到自定义的路径下面。

完整代码:

import xlwt# 创建excel表格类型文件book = xlwt.Workbook(encoding='utf-8')# 在excel表格类型文件中建立一张sheet表单sheet = book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True)# 自定义列名col = ('电影详情链接','图片链接','影片中文名','影片外国名','评分','评价数','概况','相关信息')# 将列属性元组col写进sheet表单中for i in range(0,8):  sheet.write(0,i,col[i])# 将数据写进sheet表单中datalist = [['www','www图片','西游记','xiyouji','100分','0人','很好','超级棒'],['www2','www图片2','西游记2','xiyouji2','1000分','1人','很棒','一级棒']]for i in range(0,2):  data = datalist[i]  for j in range(0,8):      sheet.write(i+1,j,data[j])# 保存excel文件savepath = 'excel表格.xls'book.save(savepath)

运行截图

批量合并:怎样实现 Excel 的合并?

假设你需要对某些工作内容进行问卷调查,一般是先把 Excel 通过工作群分发给所有员工,再把群里收集到的反馈附件汇总成一个文件。

每个员工上交的Excel如下:

名字

第一题

第二题

小红

D

B

名字

第一题

第二题

小方

A

C

你要做的工作是汇总,

名字

第一题

第二题

小红

D

B

小方

A

C

如果是员工人数不多,操作起来还是很方便的。但是当员工数量几万个人时,这将是一件非常费时的事情。

我想你可能会想,有没有什么好的方法呢?那是必然的,可以用Python和相关的第三库实现。我们来看看具体实现过程:

首先,根据上面Excel数据生成过程,我们创建2张Excel表:

import xlwt# 创建excel表格类型文件table = xlwt.Workbook(encoding='utf-8')# 在excel表格类型文件中建立一张sheet表单sheet = table.add_sheet('sheet1',cell_overwrite_ok=True)# 自定义列名col = ('名字','第一题','第二题')# 将列属性元组col写进sheet表单中for i in range(0,3):  sheet.write(0,i,col[i])# 将数据写进sheet表单中data = ['小方','A','C']for j in range(0,3):  sheet.write(1,j,data[j])# 保存excel文件savepath = 'excel1.xls'table.save(savepath)

import xlwt# 创建excel表格类型文件table = xlwt.Workbook(encoding='utf-8')# 在excel表格类型文件中建立一张sheet表单sheet = table.add_sheet('sheet1',cell_overwrite_ok=True)# 自定义列名col = ('名字','第一题','第二题')# 将列属性元组col写进sheet表单中for i in range(0,3):  sheet.write(0,i,col[i])# 将数据写进sheet表单中data = ['小红','D','B']for j in range(0,3):  sheet.write(1,j,data[j])# 保存excel文件savepath = 'excel2.xls'table.save(savepath)

好了,我们数据已经准备好了,接下来,看看如何汇总吧!

其工作流程定义为三个步骤:

1. 找到整个工作过程当中重复操作的部分;

2.将重复操作的部分需要哪些手工操作找出来,使用 Python 编写程序代替手工操作的部

分;

3. 对重复的部分,使用循环语句进行批量处理。

import xlrdimport xlwtfrom pathlib import Path, PurePath# 导入excel和文件操作库# 指定要合并excel的路径src_path = '/content'# 指定合并完成的路径dst_file = '结果.xlsx'# 取得该目录下所有的xlsx格式文件p = Path(src_path)files = [x for x in p.iterdir() if PurePath(x).match('*.xls')]print(files)# 准备一个列表存放读取结果content = []# 对每一个文件进行重复处理for file in files:  data = xlrd.open_workbook(file)  table = data.sheets()[0]  # 取得每一项的结果  answer0 = table.cell_value(rowx=1, colx=0)  answer1 = table.cell_value(rowx=1, colx=1)  answer2 = table.cell_value(rowx=1, colx=2)  temp = f'{answer0},{answer1},{answer2}'  # 合并为一行先存储起来  content.append(temp.split(','))  print(temp)  # 输出  # 小红,D,B  # 小方,A,C  # 准备写入文件的表头table_header = ['名字', '第一题', '第二题']workbook = xlwt.Workbook(encoding='utf-8')xlsheet = workbook.add_sheet("统计结果")# 写入表头row = 0col = 0for cell_header in table_header:  xlsheet.write(row, col, cell_header)  col += 1# 向下移动一行row += 1# 取出每一行内容for line in content:  col = 0  # 取出每个单元格内容  for cell in line:  # 写入内容    xlsheet.write(row, col, cell)    # 向右移动一个单元格    col += 1  # 向下移动一行  row += 1# 保存最终结果workbook.save(dst_file)

我使用了 for 语句依次获取 src_path 变量指向的路径下所有的文件。同时,为了避免这个目录里的文件类型过多,我使用一个 if 语句用于条件判断,只提取 .xls 结尾的文件。

合并后的效果如下图:

名字

第一题

第二题

小红

D

B

小方

A

C

批量拆分:怎样实现 Excel 的拆分?

对于批量操作 Excel,还有一种情况是批量拆分。比如很多公司会用 Excel 记录和统计员工的薪水、记录货物信息、记录客户情况等数据。这些数据越来越多之后,文件会越来越大,打开文件和查找速度就会变得很慢,最后只好按照某些列进行 Excel 的拆分。

核心代码如下

for line in range(1,employee_number):  content = table.row_values(rowx=line, start_colx=0, end_colx=None)  # 将表头和员工数量重新组成一个新的文件  new_content = []  # 增加表头到要写入的内容中  new_content.append(salary_header)  # 增加员工工资到要写入的内容中  new_content.append(content)  # 调用自定义函数write_to_file()写入新的文件  write_to_file(filename = content[1], cnt = new_content)

文件的批量拆分也是通过循环来实现逐行处理的功能的,但是你需要注意拆分以后的要保存的文件名称不要重复,不然很容易导致 Excel 中只有最后一次循环写入的内容。

标签: #python处理多个文件