Python基础之Excel文件操作

前言
Python中想要对Excel文件数据的处理,通常需要使用第三方库openpyxl、pandas。下面我将分别介绍这两种库用于处理测试数据的一些用法(我想要的测试数据格式为[{ },{ }…{ }],其中字典的key是对应文件的表头,value是对应字段的值)。

openpyxl库处理Excel

【处理流程】

1.导入对应的第三方库(from openpyxl import load_workbook
2.找到想要操作文件的路径后打开excel对象(wb=load_workbook(想要打开文件的路径(为了拓展最好是相对路径))
3.获取表单对象(sh=wb[“Excel中对应的sheet页名称”]
4.通过坐标获取对应的内容(value=sh.cell(坐标).value
注意!使用openpyxl库逐字段获取数据时下标要从(1,1)开始。当获取的单元格值为空时,返回None
5. 逐个单元格获取:先获取表头,然后逐行逐单元格获取对应的值,并且与表头一一对应。

def read_excel(self):
#定义空列表1,用于存放表表头字段
    data_title = [] 
# sh.max_column+1是因为使用openpyxl库时坐标要从(1,1)开始
    for col in range(1, self.sh.max_column+1):  
# 通过for循环将每个表头数据放入列表中    
        data_title.append(self.sh.cell(1, col).value) 
# 定义空列表2用于存放最终的测试数据        
    data_value = []  
# range(2, self.sh.max_row+1)这里取2是因为第一行是表头数据,我们需要取的是表头以外的数据
#第一层循环需要遍历除表头外所有的行   
    for row in range(2, self.sh.max_row+1):
#每次循环都定义一个空字典用于存放非表头数据。基于字典key-value的数据结构,实现表字段与对应数据的对应
        data_dict = {}
#第二层循环需要对每一列的数据进行遍历
        for col in range(1, self.sh.max_column+1):
#data_title[col-1]是因为列表的下标是从0开始的,而我们的col是从1开始自增的
            data_dict[data_title[col-1]] = self.sh.cell(row, col).value
#第二个循环每次遍历的结果都是一个字典,第二个循环完成之后,会重新开始第一层循环
#使用append将第二次循环的结果加入列表,得到的数据样式为[{字典1},{字典2}]
        data_value.append(data_dict)
#最终完成所有数据的汇总    
    return data_value

逐行获取:

def read_excel12(self):
#定义空列表1保存表头字段
    list_title = []
#list(self.sh.rows)[0]使用list这个工厂函数是因为sh.rows的结果是一个generator(可迭代对象)
#对该对象进行切片是为了获取表头行的信息
    for i in list(self.sh.rows)[0]:
#通过第一层循环,此时i是openpyxl的cell对象,因此获取数据需要使用i.value方法
        list_title.append(i.value)
#创建一个新的列表,存放除表头行以外最终结果
    list_value = []
#list(self.sh.rows)[1:]是由于list(self.sh.rows)整体就是列表,使用切片将表头行分隔开
    for row in list(self.sh.rows)[1:]:
#定义一个列表,存放行对象具体的值,此时j的类型为一个cell对象
        case_list = []
        for j in row:
#cell.value 用于读取和修改单元格的实际内容
            case_list.append(j.value)
#zip函数主要作用是将多个可迭代对象(如列表、元组、字典视图等)中相对应位置的元素打包成一个个元组(tuple),
#形成一个新的迭代器(iterator),想要访问该迭代器需要使用工厂函数(list、dict)将其转换为一个可迭代对象或者通过for循环访问
            tuple_value = dict(zip(list_title, case_list))
        list_value.append(tuple_value)
    return list_value
    

修改excel中的数据
【修改指定单元格数据】
可通过指定下标实现数据修改,也可通过for循环完成指定列、指定行数据更改
保存修改的内容时,需要保证原本的Excel文件处于关闭状态
在这里插入图片描述

使用workbook创建一个Excel文件,并向里面写入内容
思路:使用openpyxl库中的Workbook包--------声明Workbook对象--------使用声明的对象去声明一个默认的sheet页
使用声明的sheet页对象添加列名------通过循环,使用声明的sheet页对象逐行添加Excel的内容-----使用声明的
Workbook对象存储内容
在这里插入图片描述
注意!openpyxl主要用于处理.xlsx格式的文件,openpyxl库不能直接处理csv文件

pandas处理Excel
【读取csv文件】

def read_csv_pandas(self):
  
    csv_path = data_path + "/test1.csv"
    df = pd.read_csv(csv_path)
 # df.to_dict():此方法将DataFrame对象df转换为字典类型,当指定 'records' 作为to_dict()方法的参数时,
 #它指示将DataFrame的每一行数据转换为一个独立的字典,每个字典的键是DataFrame的列名
    data_dict = df.to_dict('records')
    return data_dict 

【读取xlsx、xlsx文件】

   def read_excel_pandas(self):
     # 使用pandas读取数据时,需要注意header熟悉,为None表示表头也作为数据行,不为None不读取表头,只读取数据行。默认为	None
     # 读取的结果是一个DataFrame数据结构
        df = pd.read_excel(self.path)  
        if pd.__version__ >= '1.0.0':
        #使用pandas库中自带的replace函数对DataFrame进行操作,它接受一个映射(通常为字典),其中键代表要被替换的原始值,值代表替换后的目标值。
            df = df.replace({pd.NA: None, '': None, np.nan: None})  # 在 Pandas 中,当读取 CSV 文件时遇到空值(如空字符串或空单元格)
        else:
            print("进入1.0以下的逻辑")      # 默认情况下它们会被解析为 NaN(Not a Number)
            df = df.replace({np.nan: None, '': None})
       # 将pandas.DataFrame对象转换为字典列表(即字典构成的列表),并将其赋值给变量data
       # 使用 ‘records’时 to_dict()会将DataFrame的每一行数据转换为一个字典,每个字典的键是列名
        data = df.to_dict('records')
        return data
                                                                                                            学海无涯
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值