本文主要讲解怎样使用Python对多个excel文件任意区域内容进行批量提取。在看这篇文章之前,默认你已经具备了python的基础知识。如果没有任何基础,建议先看看上一篇文章:【学习心得】我的Python入门之旅。
话不多说,直接上原始数据给大家看,注意,本文所使用数据全部为模拟假设数据,并非真实数据,请勿他用。本次使用数据为8个excel文件,理论上80个、800个excel都可以用本文方法进行操作…所以,主要学习方法应用…
数据说明,在文件夹里有多个excel文件如下图:
同时,文件里的数据结构如下图,给出两个示例图:
上面示例数据的数据结构是一样的,注意现在提出的提取要求:把上面8个城市(也就是8个文件)的2005-2010年的前5列数据提取至一个sheet表里,该怎么办呢?当然了,8个城市完全可以手动复制粘贴,那么80个、800个城市呢?显然不行,工作量太大。这里我们可以使用python进行批量提取。当然本文只是应用了python的其中一些库,还有很多种方法可以满足这个需求,暂且不论。
本文主要使用到两个python库,一个是os库,主要用来对系统内的一些处理进行响应;另一个是openpyxl库,主要对excel文件进行操作处理。接下来,我将直接上全部代码,然后再逐一分析每段代码背后的故事…
-----------------完整代码分割线---------------
#coding=utf-8
from openpyxl import Workbook
from openpyxl import load_workbook
import openpyxl
import os
wb2=openpyxl.Workbook()
wb2.save('newdata.xlsx')
print u"新建Excel文件成功"
filepath="c:\\cz\\data"
dataset=os.listdir(filepath)
wb2=openpyxl.load_workbook('newdata.xlsx')
sheets2=wb2.sheetnames
sheet2=wb2[sheets2[0]]
k=1
countnum=1
for i in dataset:
print "run the number:{0} {1}".format(countnum,i)
wb1=openpyxl.load_workbook(filepath+"\\{}".format(i))
sheets1=wb1.sheetnames
sheet1=wb1[sheets1[0]]
j=k
for m in range(6,12):
for n in range(1,8):
cell1=sheet1.cell(row=m,column=n).value
sheet2.cell(row=j,column=n).value=cell1
j=j+1
k=j
countnum=countnum+1
wb2.save('newdata.xlsx')
wb1.close()
wb2.close()
print "run process successfully"
-----------------完整代码分割线---------------
运行代码后,在代码py格式文件目录下会自动生成一个新的excel文件:newdata.xlsx。这就是我们需要的文件,代码运行过程如下:
代码运行结果如下:
这里的newdata.xlsx就是我们需要的文件,打开文件如下:
可以想象,如果有成千上百的excel文件需要我们提取固定区域的数据的话,这段代码能够给我们减轻很大的负担。
不行,累了,先不写了,完整代码分析明天我再写个续文吧。
共同学习,一起进步!明天继续。