前言:
眼前兄弟们对“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处理多个文件