python处理Excel文件(学习两个操作工具)
python处理excel大数据的读和写
python在excel文件处理的过程中担任什么角色
没有接触过编程的同学多多少少会对程序代码有点畏惧感,既然excel表格那么好用,鼠标点点,键盘敲敲就可以啦,那为什么还要用python对它进行操作呢。
随着大数据时代的来临,除了办公会用到excel表格外,涉及到大数据工程的项目上需要对大量数据进行处理,这就难免会涉及到很多数据的重复性工作。python能够很便捷地对表格进行大量数据的处理,将重复性工作代码化,运行一段代码就可以避免很多重复性工作。
怎么去理解python语言
python是一种面向对象的语言。
电视机遥控器就是一个对象(可以把对象理解为一个实实在在的东西),遥控器上面的按钮就对应着不同的功能,比如换台,关电视等等,这里被操作的是电视。
同样,用python可以写出很多工具对象,这个工具对象有很多功能,在这里被操作的是表格。
我们可以利用python可以写出很多的工具对象,不同的工具控制着不同的东西,这里我们主要讲控制表格的工具。
我用python写好的两个简单的工具对象(不用掌握代码细节,学会使用这两个工具就好)
下面是我写好的两个工具对象(不用看完整代码,记住class后面的名字以及def后面的名字就好)
这段代码制作了两个工具(出现了两个class,一个class就对应一个工具对象),一个是用来读Excel数据的,一个是用来把数据写入Excel的。每次操作表格之前,拷贝到编译器即可.
class后面的名称**ExcelData()和softwareOfwriteToExcel()**是我们在用这个工具一定会用到的,需要用哪个工具就调用哪个。
读工具的使用
- 对表格进行操作之前需要把读和写的工具总体代码拷贝到编译器内(照样子拷贝就行,不要看完整代码,记住上面的图片内的工具名称以及功能名称即可)。
from xlrd import xldate_as_tuple
import xlrd
import xlwt
import datetime
'''***************************'''
class ExcelData(): #提取有效行数和列数,提取整行数据
# 初始化方法
def __init__(self, data_path, sheetname):
#定义一个属性接收文件路径
self.data_path = data_path
# 定义一个属性接收工作表名称
self.sheetname = sheetname
# 使用xlrd模块打开excel表读取数据
self.data = xlrd.open_workbook(self.data_path)
# 根据工作表的名称获取工作表中的内容(方式①)
self.table = self.data.sheet_by_name(self.sheetname)
# 根据工作表的索引获取工作表的内容(方式②)
#self.table = self.data.sheet_by_name(0)
# 获取第一行所有内容,如果括号中1就是第二行,这点跟列表索引类似
self.keys = self.table.row_values(0)
# 获取工作表的有效行数
self.rowNum = self.table.nrows
# 获取工作表的有效列数
self.colNum = self.table.ncols
# 定义一个读取excel表的方法
def readExcel(self):
# 定义一个空列表
datas = []
for i in range(1, self.rowNum):
# 定义一个空字典
sheet_data = {}
for j in range(self.colNum):
# 获取单元格数据类型
c_type = self.table.cell(i,j).ctype
# 获取单元格数据
c_cell = self.table.cell_value(i, j)
if c_type == 2 and c_cell % 1 == 0: # 如果是整形
c_cell = int(c_cell)
elif c_type == 3:
# 转成datetime对象
date = datetime.datetime(*xldate_as_tuple(c_cell,0))
c_cell = date.strftime('%Y/%d/%m %H:%M:%S')
elif c_type == 4:
c_cell = True if c_cell == 1 else False
sheet_data[self.keys[j]] = c_cell
# 循环每一个有效的单元格,将字段与值对应存储到字典中
# 字典的key就是excel表中每列第一行的字段
# sheet_data[self.keys[j]] = self.table.row_values(i)[j]
# 再将字典追加到列表中
datas.append(sheet_data)
# 返回从excel中获取到的数据:以列表存字典的形式返回
return datas
#定义一个获取行内容的方法,输入行数
def getRow(self,num):
rowContent = self.table.row_values(num-1)
return rowContent
#定义一个获取列内容的方法,输入列数
def getCol(self,num):
colContent = self.table.col_values(num-1)
return colContent
'''************************************************'''
class softwareOfwriteToExcel():
def __init__(self,name_of_excel,name_of_sheet):
self.name_of_excel = name_of_excel
self.name_of_sheet = name_of_sheet
self.w = xlwt.Workbook() # 创建一个工作簿
self.ws = self.w.add_sheet(self.name_of_sheet) # 创建一个工作表
def writeToExcel(self,row,col,content):
self.ws.write(row-1,col-1,content)
self.w.save(self.name_of_excel)
def writeToROW(self,rowNum,list):
num = 1
for i in list:
self.ws.write(rowNum-1,num-1,i)
num += 1
self.w.save(self.name_of_excel)
def writeToCol(self,colNum,list):
num = 1
for i in list:
self.ws.write(num-1,colNum-1,i)
num += 1
self.w.save(self.name_of_excel)
- 现在,我们已经获取了两个工具,接下来取一个工具对象并取名字为read_tool
#不用刻意理解,每次都这么写
read_tool = ExcelData('/Users/jerry/Desktop/example.xlsx','Sheet3')
这里我们往读工具内传入了两个参数,一个是/Users/jerry/Desktop/example.xlsx,这个是被操作表格的绝对路径,另外一个是表格内被操作表单的名称,运行这一行代码我们就获取到了表格内的数据,并存放在了read_tool里,接下来要读表格内的数据其实就是对read_tool进行操作。
3 . 获取下面表格的第1行数据并打印出来
遥控器使用功能的方法是按键,python工具对象使用功能的方法是** .+功能名字 **,由以上简图可知,获取行内容的功能名称为getRow,所以调用的方法就是read_tool.getRow(1),1为行号
print(read_tool.getRow(1))
运行结果为
4. 以此类推,获取第1列的数据,调用的方法为read_tool.getCol(1),若要打印结果则使用
print(read_tool.getCol(1))
运行结果为
写工具的使用
- 和读工具的使用一样,先导入两个工具
from xlrd import xldate_as_tuple
import xlrd
import xlwt
import datetime
'''***************************'''
class ExcelData(): #提取有效行数和列数,提取整行数据
# 初始化方法
def __init__(self, data_path, sheetname):
#定义一个属性接收文件路径
self.data_path = data_path
# 定义一个属性接收工作表名称
self.sheetname = sheetname
# 使用xlrd模块打开excel表读取数据
self.data = xlrd.open_workbook(self.data_path)
# 根据工作表的名称获取工作表中的内容(方式①)
self.table = self.data.sheet_by_name(self.sheetname)
# 根据工作表的索引获取工作表的内容(方式②)
#self.table = self.data.sheet_by_name(0)
# 获取第一行所有内容,如果括号中1就是第二行,这点跟列表索引类似
self.keys = self.table.row_values(0)
# 获取工作表的有效行数
self.rowNum = self.table.nrows
# 获取工作表的有效列数
self.colNum = self.table.ncols
# 定义一个读取excel表的方法
def readExcel(self):
# 定义一个空列表
datas = []
for i in range(1, self.rowNum):
# 定义一个空字典
sheet_data = {}
for j in range(self.colNum):
# 获取单元格数据类型
c_type = self.table.cell(i,j).ctype
# 获取单元格数据
c_cell = self.table.cell_value(i, j)
if c_type == 2 and c_cell % 1 == 0: # 如果是整形
c_cell = int(c_cell)
elif c_type == 3:
# 转成datetime对象
date = datetime.datetime(*xldate_as_tuple(c_cell,0))
c_cell = date.strftime('%Y/%d/%m %H:%M:%S')
elif c_type == 4:
c_cell = True if c_cell == 1 else False
sheet_data[self.keys[j]] = c_cell
# 循环每一个有效的单元格,将字段与值对应存储到字典中
# 字典的key就是excel表中每列第一行的字段
# sheet_data[self.keys[j]] = self.table.row_values(i)[j]
# 再将字典追加到列表中
datas.append(sheet_data)
# 返回从excel中获取到的数据:以列表存字典的形式返回
return datas
#定义一个获取行内容的方法,输入行数
def getRow(self,num):
rowContent = self.table.row_values(num-1)
return rowContent
#定义一个获取列内容的方法,输入列数
def getCol(self,num):
colContent = self.table.col_values(num-1)
return colContent
'''************************************************'''
class softwareOfwriteToExcel():
def __init__(self,name_of_excel,name_of_sheet):
self.name_of_excel = name_of_excel
self.name_of_sheet = name_of_sheet
self.w = xlwt.Workbook() # 创建一个工作簿
self.ws = self.w.add_sheet(self.name_of_sheet) # 创建一个工作表
def writeToExcel(self,row,col,content):
self.ws.write(row-1,col-1,content)
self.w.save(self.name_of_excel)
def writeToROW(self,rowNum,list):
num = 1
for i in list:
self.ws.write(rowNum-1,num-1,i)
num += 1
self.w.save(self.name_of_excel)
def writeToCol(self,colNum,list):
num = 1
for i in list:
self.ws.write(num-1,colNum-1,i)
num += 1
self.w.save(self.name_of_excel)
- 取一个写工具并取名为write_tool
write_tool = softwareOfwriteToExcel('demo.xls','mysheet')
这句代码就制作好了一个空表格demo.xls,并打开了一个新表单mysheet,对这个新表格操作就是对write_tool进行操作
根据上面的简图和读操作,写工具下有三个主用功能
- 往一个单元格写数据writeToExcel()
- 往规定行写数据writeToROW()
- 往规定列写数据writeToCol()
- 往表格第一行第二列写一个字母haha
softwareOfwriteToExcel.writeToExcel(1,2,'haha')
#第一个参数填入行数,第二个参数填入列数,最后一个参数填入要写入单元格的内容
运行结果:
工程文件夹内生成一个名为demo.xls的文件,打开表格可以看到第一样第二列出现了haha字符串
- 第8行写入列表[1,2,3,4,5,6,“djd”]
list = [1,2,3,4,5,6,"djd"]
#第一个参数为行数,第二个参数为需要写入的内容
softwareOfwriteToExcel.writeToRow(8,list)
运行结果:
5. 第9列写入列表[1,2,3,4,5,6,“djd”,“djdj”,“djdjdj”]
list = [1,2,3,4,5,6,"djd","djdj","djdjdj"]
#第一个参数填入列数,第二个参数写入内容列表
softwareOfwriteToExcel.writeToCol(9,list)
运行结果:
总结
以上代码模块将常用的读和写的功能都涵盖进来了,工具的具体代码不用看更不用记。需要对表格操作时:
- 将工具拷贝到编译器
- 给工具取一个名字,就像read_tool和write_tool,然后所有的操作都围绕着两个对象进行操作
- 使用某个功能就(.+功能名称),然后按照要求写入参数就好,如用到读工具的读第1行:
read_tool.getRow(1)
写工具依此类推
本文地址:https://blog.csdn.net/weixin_43580807/article/details/107298276
上一篇: 运营商承载网络演进