python处理csv文件和excel文件读取数据详解(xlrd/xlwt及openpyxl分析) 您所在的位置:网站首页 python处理csv文件数据 python处理csv文件和excel文件读取数据详解(xlrd/xlwt及openpyxl分析)

python处理csv文件和excel文件读取数据详解(xlrd/xlwt及openpyxl分析)

2023-11-03 15:31| 来源: 网络整理| 查看: 265

文章目录 CSV文件处理CSV文件读取的两种方式CSV文件写入的两种方式 Excel文件处理读取Excel文件cell的相关操作cell的数据类型写入Excel文件步骤编辑Excel文件

CSV文件处理 CSV文件读取的两种方式

1、reader(fp) 这种方式读取到的每一条数据是一个列表,元素需要通过列表名加下标的方式获取

import csv def open_csv_1(file_obj): ''' 这种方式读取到的每一条数据是一个列表,元素需要通过列表名加下标的方式获取 ''' with open(file_obj, 'r', encoding = 'utf-8' ) as fr: reader = csv.reader(fr) for i in reader: print(i[index]) file_obj = './test.csv' open_csv_1(file_obj)

2、DictReader(fp) 这种方式读到的每一条数据是一个字典,通过关键字形式获取需要的值

import csv def open_csv_1(file_obj): ''' 这种方式读到的每一条数据是一个字典,通过关键字形式获取需要的值 ''' with open(file_obj, 'r', encoding = 'utf-8' ) as fr: reader = csv.DictReader(fr) for i in reader: print(i['name']) file_obj = './test.csv' open_csv_1(file_obj) CSV文件写入的两种方式

1、writer(fp) 创建了一个writer的对象,用这个对象可以调用writerow、writerows方法,将python对象写入csv文件

import csv head = ('name', 'age', 'score') student = [ ('张三', 12, 100), ('李四', 23, 99), ('王五', 14, 1001) ] # newline 是为了保证csv中的数据之间不会出现空行,默认是\n with open('student.csv', 'w', encoding = 'utf-8', newline = '') as f: content = csv.writer(f) # writerow只能写入一行数据 content.writerow(head) # writerows可以将全部内容写入 content.writerows(student)

在这里插入图片描述

2、DictWriter(fp, head)

# 如果要用DicWriter方法的话,数据就要修改成字典的样式了 student = [ {'name':'张三','age': 12,'score' :100}, {'name':'李四','age': 23,'score' :99}, {'name':'王五','age': 14,'score' :1001} ] with open('student1.csv', 'w', encoding = 'utf-8', newline = '') as f: # DictWriter方法中除了文件指针之外,还需要加入存储头部数据的变量名 # 但是这没有办法直接将head头部数据写入 # 还需要调用writeheader()方法才可 content = csv.DictWriter(f, head) content.writeheader() # writerow只能写入一行数据 # content.writerow(head) # writerows可以将全部内容写入 content.writerows(student)

在这里插入图片描述

Excel文件处理

openpyxl与xlrd/xlwt的区别和效率

区别:效率:python中xlrd/xlwt与openpyxl处理Excel的主要区别在于写入操作,其中xlwt针对Ecxec2007之前的版本,即.xls文件,其要求单个sheet不超过65535行,而openpyxl则主要针对Excel2007之后的版本(.xlsx),它对文件大小没有限制。整体而言,两种包对小文件的读写速度差别不大,而面对较大文件,xlrd/xlwt速度明显优于openpyxl,但因为xlwt无法生成xlsx是个硬伤,所以想要尽量提高效率又不影响结果时,可以考虑用xlrd读取,用openpyxl写入。 读取Excel文件

打开Excel文件

xlrd.open_workbook('test.xls')

获取sheet

sheet_names() 获取所有sheet的名字sheet_by_index()根据索引获取sheet对象sheet_by_name()根据名字获取sheet对象sheets()获取所有sheet对象sheet.nrows 获取当前sheet的行数sheet.ncols获取当前sheet的列数

基本的代码操作

import xlrd import xlwt workbook = xlrd.open_workbook('chart_style.xlsx') # sheet_names()获取文件当中所有sheet名字 print(workbook.sheet_names()) # sheet_by_index() 通过索引获取对象 sheet = workbook.sheet_by_index(1) print(sheet.name) # sheet_by_name() 通过名字获取对象 sheet = workbook.sheet_by_name('bubbleChart') print(sheet.name) # sheets() 获取所有sheet对象 返回值是list sheet = workbook.sheets() print(sheet) # sheet.nrows() 获取指定sheet行数 sheet = workbook.sheet_by_name('pieChart') print(sheet.nrows) # sheet.ncols() 与上面同理

excel文件中的相应数据 在这里插入图片描述 代码运行之后获取的对应结果 在这里插入图片描述

cell的相关操作 sheet.cell(row,col)获取指定行和列的cell对象sheet.row_slice(row,start_col,end_col)获取指定行的某几列的cell对象sheet.col_slice(col,start_row,end_row)获取指定列的某几行的cell对象sheet.cell_value(row, col)获取指定行和列的值sheet.row_values(row,start_col,end_col)获取指定行的某几列的值sheet.col_values(col, start_row, end_row)获取指定列的某几行的值

具体实现的代码

# cell相关操作 # 先获取某一个sheet sheet1 = workbook.sheet_by_index(0) # 获取指定行列的cell对象 cell = sheet1.cell(0,1) # cell.value 获取单元格的值 print(cell.value) # 获取指定行的某几列cell对象 cell_row = sheet1.row_slice(0,0,2) print(cell_row, type(cell_row)) # 获取指定列的某几行cell对象 cell_col = sheet1.col_slice(1, 0, 6) print(cell_col) for cell in cell_col: print(cell.value) # 直接获取指定行列的cell值 cell_value = sheet1.cell_value(3,1) print(cell_value) # 获取指定行的某几列的值 cell_row_value = sheet1.row_values(1,0,2) print(cell_row_value) # 获取指定列的某几行的值 cell_col_value = sheet1.col_values(0,1,6) print(cell_col_value)

文件的具体数据 在这里插入图片描述

实现的结果 在这里插入图片描述

cell的数据类型 xlrd.XL_CELL_TEXT(Text)文本类型xlrd.XL_CELL_NUMBER(Number)数值类型xlrd.XL_CELL_DATE(Date)日期时间类型xlrd.XL_CELL_BOOLEAN(Bool)布尔类型xlrd.XL_CELL_EMPTY空白数据类型

处理的文件数据 在这里插入图片描述 具体实现的代码

#cell的数据类型 # 先获取sheet sheet1 = workbook.sheet_by_index(1) # 获取cell cell = sheet1.cell(0, 0) print(cell.ctype) print('xlrd.XL_CELL_TEXT:',xlrd.XL_CELL_TEXT) cell = sheet1.cell(1, 1) print(cell.ctype) print('xlrd.XL_CELL_NUMBER:', xlrd.XL_CELL_NUMBER) cell = sheet1.cell(7, 0) print(cell.ctype) print('xlrd.XL_CELL_DATE:', xlrd.XL_CELL_DATE) cell = sheet1.cell(7, 1) print(cell.ctype) print('xlrd.XL_CELL_BOOLEAN:', xlrd.XL_CELL_BOOLEAN) cell = sheet1.cell(7, 2) print(cell.ctype) print('xlrd.XL_CELL_EMPTY:', xlrd.XL_CELL_EMPTY)

实现效果

在这里插入图片描述

写入Excel文件步骤 1、导入xlwt模块2、创建一个Workbook对象3、创建一个Sheet对象4、使用sheet.write方法把数据写入到Sheet下指定行和列中。如果想要在原来workbook对象上添加新的cell,那么需要调用put_cell来添加5、保存成Excel文件

具体实现代码:

# 写入excel文件 # 创建写入文件的对象 workbook = xlwt.Workbook() # add_sheet 创建一个sheet sheet = workbook.add_sheet('case_sheet') headers = ['姓名', '语文', '英语', '数学'] for i, head in enumerate(headers): ''' 调用write方法写入数据 write方法中第一个参数:行 第二个参数:列 第三个参数:要写入的内容 ''' sheet.write(0, i, head) # 写入姓名 names = ['张三', '李四', '王五', '赵六'] for i , name in enumerate(names): sheet.write(i+1, 0, name) # 批量写入数据 for row in range(1, 5): for col in range(1, 4): sheet.write(row, col, random.randint(60, 100)) # 保存文件 workbook.save('case_write.xlsx')

在这里插入图片描述

编辑Excel文件

思路、步骤

1、先读取原来的Excel文件2、然后在读取的sheet上进行单元格的修改用put_cell(row, col,ctype,vaule,None)即可3、重新创建一个新的Excel文件,把之前读到的数据写入的新的文件中

详细代码:

import xlrd import xlwt import math # 打开一个excel文件 rworkbook = xlrd.open_workbook('chart_style.xlsx') # 获取一个sheet rsheet = rworkbook.sheet_by_name('bubbleChart') ''' 在原有文件的基础上要加入新的内容 需要用到put_cell方法 里面有五个参数 rowx,colx,ctype,value,xf_index 最后一个参数是去控制样式,写None即可 ''' rsheet.put_cell(0, 3, xlrd.XL_CELL_TEXT,'money', None) # 读取数据 for row in range(1, rsheet.nrows): row_value = rsheet.row_values(row,1,3) print(row_value) total_money = row_value[0]*row_value[1] print(total_money) rsheet.put_cell(row,3,xlrd.XL_CELL_NUMBER, total_money,None) nrows = rsheet.nrows # 求各数据的平均值 sales、market share 、money for col in range(1, 4): total = rsheet.col_values(col, 1, nrows) print('总数', total) avg = sum(total) / len(total) rsheet.put_cell(nrows, col, xlrd.XL_CELL_NUMBER, avg, None) print(avg) # 写入数据 # 创建Workbook对象 wworkbook = xlwt.Workbook() wsheet = wworkbook.add_sheet('bubbleChart_add') # 获取原始文件的行列数 nrows = rsheet.nrows ncols = rsheet.ncols for row in range(0, nrows): for col in range(0, ncols): wsheet.write(row, col, rsheet.cell_value(row, col)) wworkbook.save('更新之后的.xlsx')

运行结果: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有