最近在写项目,刚好要运用到excel表格的一些读写,顺便总结一下我以前学过的几个关于表格的操作。在写项目中,经常会见到页面中数据导出到表格中,同时,也会有经常在表格中填写测试用例,然后获取数据来做自动化测试的情况,那就我目前会的几种做一个总结吧~
篇幅较长,满满的干货~
1、csv文件读写
csv文件是我最开始接触的表格文件的读写文本类型,但是严格意义上来说csv文件就是一个纯文本文件,只不过支持通过表格打开,而且csv文件中的标点符号一定要是英文的格式。1、读取csv文件中内容【可以自己手动创建一个csv文件,逗号分隔】import csvimport codecs# 创建一个csv文件,并填入内容def load_csv(): with open('a.csv','a') as file: f=csv.reader(file) print(list(f)) # 直接打印f,是一个object对象 file.close() # 关闭文件
2、写入到csv文件中
def load_csv(): header = {'title', 'content'} # 表头数据 data1 = ['test1', 'test2'] # 单行数据 data2 = [['test1', 'one'], ['test2', 'two']] # list数据 with open('b.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerow(header) writer.writerow(data1) # 写入单行 writer.writerows(data2) # 写入多行
3、读取文件DictReader方法【读取结果为字典类型】
# 打印出来的数据是字典类型,表格的表头为键、每一行的值为值,值有几行就打印几个字典def read_csv(): with open('b.csv', 'r') as file: f = csv.DictReader(file) for i in f: print(i['title'], i['content'])
4、
写入文件DictWriter方法【写入内容为字典类型】
def load_csv(): datas = {'title': '1', 'content': '测试test1'} f = codecs.open('b.csv', 'w', 'gbk') writer = csv.DictWriter(f, fieldnames=['title', 'content']) writer.writeheader() writer.writerow(datas) # 写入一行 writer.writerows(datas) # 写入多行
2、openpyxl对Excel文件读写
还记得以前写过的3分钟爬取微博热搜么?我们就结合这个来做文件的读写。 常用知识点:# 创建一个excel表格wb = openpyxl.Workbook()# 给表格添加sheet名称wb.create_sheet(index=0, )# 保存表格wb.save('test_openpyxl.xlsx')
1、读取微博爬取的内容写到表格
# 获取微博热搜内容def get_text(): list_n = ['排行'] list_r = ['热搜名'] url = 'https://s.weibo.com/top/summary' header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36' } response = requests.get(url=url, headers=header) if response.status_code == 200: #判断接口请求是否正确 html = etree.HTML(requests.get(url, headers=header).text) # 构造XPath解析对象 hot_search_name = html.xpath('//td[@]/a/text()') # 热搜名 字符串列表 hot_search_rank = html.xpath('//td[@]/text()') # 热搜排行 hot_search_name_true = hot_search_name[1:] # 只取热搜排行,不取置顶热搜 for i in range(0, 10): s = hot_search_rank[i] # 排行和热搜组合 r = hot_search_name_true[i] list_n.append(s) list_r.append(r) else: print('wrong') return zip(list_n, list_r)# 将微博文件内容到表格def get_website_to_excel(): result = get_text() # 微博内容结果 wb = openpyxl.Workbook() sheet = wb.active #获取初始的sheet count = 1 for inner in result: sheet.cell(row=count, column=1).value = inner[0] sheet.cell(row=count, column=2).value = inner[1] count += 1 wb.save('微博.xlsx') # 保存到当前目录下
2、读取表格内容
def get_excel_content(): # 打开工作簿 lw = openpyxl.load_workbook('test_openpyxl.xlsx') # 选取表单 sheet_name = lw.active # 获取第一行第一列的数据 A1 # ce = sheet_name.cell(row=1, column=1) # print(ce.value) # 按行读取数据 去表头 print(list(sheet_name.rows)[1:]) for cases in list(sheet_name.rows)[1:]: rank = cases[0].value name = cases[1].value print(rank, name)
3、xlrd 和 xlwt
1、读取Excel中的数据import xlrdimport xlwtdef get_excel(): # 获取数据 data = xlrd.open_workbook('微博.xlsx') # 获取sheet # table = data.sheet_by_name('test') # 通过sheet名称获取数据 table = data.sheet_by_index(0) # 通过sheet索引获取数据 # 获取总行数 rows = table.nrows # 获取总列数 cols = table.ncols # 获取某个单元格的数据 cell_value = table.cell(0, 1).value print(cell_value) # 获取excel表格所有数据 for i in range(rows): for j in range(cols): print(table.cell(i, j).value)
2、写入内容到Excel表格中
def write_excel(): data = [['title', 'content'], ['test1', 'test2']] # 创建excel wb = xlwt.Workbook() # 创建excel中的sheet ws = wb.add_sheet('test') for i in range(len(data)): for j in range(len(data[i])): ws.write(i, j, data[i][j]) # ws.write(0, 0, 'hahah') wb.save('test.xls')
总结要点:
1、读写文件的时候,记得要把文件关掉
2、输入中文时,乱码的话,可以导入codes包,然后设置中文格式为gbk,可以看到不少乱码了。
3、writerow和writerows的区别:writerow写入一行数据,writerows写入多行数据,而且写入多行数据的类型DictWriter字典类型,writer是list类型【有不对的欢迎指出来】
4、xlrd:对xls、xlsx、xlsm文件进行读操作–读操作效率较高
5、xlwt:对xls文件进行写操作–写操作效率较高,但是不能执行xlsx文件
6、openpyxl:对xlsx、xlsm文件进行读、写操作–xlsx写操作推荐使用,不能写xls文件
每天进步一点点,加油!!!