csv和excel文件操作
csv文件读操作
-
什么是csv文件
csv文件叫逗号分隔值文件 - 每一行内容是通过逗号来区分出不同的列
csv文件可以直接通过excel打开,以行列的形式保存和显示数据,但是相对excel文件,它只能存储数据,不能保存格式和函数
-
csv读操作
import csv
(1)创建打开csv文件
f = open('files/电影.csv','r',encoding='utf-8')
(2)创建reader获取文件内容
a. csv.reader(文件对象) - 获取文件内容,并且以列表为单位返回每一行内容
reader1 = csv.reader(f) print(list(reader1))
b. csv.DictReader(文件对象) - 获取文件内容,并且以字典为单位返回第2行开始的每一行内容(字典的键是第一行内容)
reader2 = csv.DictReader(f) print(list(reader2))
练习:计算拉钩数据中,各个城市数据分析岗位的平均薪资
# 获取文件内容 from re import findall with open('files/lagou.csv', encoding='utf-8') as f: reader = csv.DictReader(f) # 处理数据 cities = {} for job in reader: c = job['city'] m = job['salary'] # '8k-16k' result = findall(r'(\d+)k-(\d+)k', m) # [(8, 16)] -> (8, 16) if not result: continue start, end = result[0] moneys = cities.get(c, []) moneys.append((int(start) + int(end))/2) cities[c] = moneys # round(数字, 小数位数) - 让数字保留指定位数的小数 for key in cities: print(key, round(sum(cities[key]) / len(cities[key]), 2))
-
处理数据:
(1)文件对象 = open()
操作文件
文件对象.close()(2)with open() as 文件对象
操作文件
csv文件写操作
-
打开文件
f = open('files/date.csv', 'w', encoding='utf-8',newline='')
-
创建writer对象
(1)csv.writer(文件对象) - 创建writer对象,这个对象在写入数据的时候一行对应一个列表
writer = csv.writer(f) # 一次写入一行内容 writer.writerow(['姓名','出生日期','性别','电话']) writer.writerow(['小明','1999-9-9','男','110']) # 一次写入多行内容 writer.writerows([ ['小花','2000-3-24','女','110'], ['张三','1998-7-5','男','119'] ])
(2)csv.DictReader(文件对象, 键列表) - 创建writer对象,以字典为单位写入数据
writer = csv.DictWriter(f,['姓名','出生日期','性别','电话']) # 写入文件头(将字典的键写入到文件开头) writer.writeheader() # 一次写入一行内容 writer.writerow({'姓名': 'xiaoming', '出生日期': '1999-9-9', '电话':'110', '性别': '男'}) # 一次写入多行内容 writer.writerows([ {'姓名': 'xiaohua', '出生日期': '1999-9-9', '电话':'110', '性别': '男'}, {'姓名': 'zhangsan', '出生日期': '1999-9-9', '电话':'110', '性别': '男'} ])
虚拟环境
-
系统环境 - 安装Python就可以为计算机提供一个Python的系统环境
-
虚拟环境 - 程序员根据需要自己创建的Python环境
能够创建虚拟环境的前提:存在系统环境
-
环境的作用:
(1)提供Python解释器
(2)提供第三方库虚拟环境的存在可以让第三方库根据类别或者项目分开管理。
-
使用虚拟环境的建议:
(1)工作的时候:一个项目一个虚拟环境,并且将虚拟环境直接放在项目中
(2)学习的时候:一类项目一个虚拟环境,不同类别的虚拟环境全部放在一个地方 -
怎么创建虚拟环境
(1)使用Pycharm创建
(2)使用指令创建
excel文件读操作
认识excel文件
工作簿:一个excel文件就是一个工作簿
工作表:一个工作簿中可以有多个工作表(至少一个)
单元格:单元格是excel文件保存数据的基本单位
行号和列号:可以确定单元格位置
获取excel文件内容
-
打开excel文件创建工作簿对象
打开方式:
(1)openpyxl.open(excel文件路径)
workbook = openpyxl.open('files/三国人物数据.xlsx')
(2)openpyxl.load_workbook(excel文件路径)
workbook = openpyxl.load_workbook('files/三国人物数据.xlsx')
获取工作簿中所有的工作表的表名:
result = workbook.sheetnames print(result) # ['全部人物数据', '三个国家的武力', '三个国家武将的武力', '三国武将数据', '三国文官数据']
-
获取工作表
(1)工作簿对象.active - 获取活跃表(选中的表)
sheet1 = workbook.active print(sheet1)
(2)工作簿对象[工作表名称]
sheet2 = workbook['三国武将数据'] print(sheet2)
-
获取单元格
工作表对象.cell(行号,列号)
cell1 = sheet2.cell(8,1) cell2 = sheet2.cell(12,1) print(cell1,cell2)
-
获取单元格内容
单元格对象.value
print(cell1.value) print(cell2.value)
-
获取最大行号和最大列号(保存了数据的有效行和有效列)
(1)工作表对象.max_row
print(sheet2.max_row)
(2)工作表对象.max_column
print(sheet2.max_column)
练习1:获取第一列所有数据
column1 = [] for row in range(1, sheet2.max_row+1): cell = sheet2.cell(row, 1) column1.append(cell.value) print(column1)
练习2:获取第一列到第3列所有的数据:
for col in range(1, 4): column = [] for row in range(1, sheet2.max_row+1): cell = sheet2.cell(row, col) column.append(cell.value) print(column)
excel文件写操作
注意:不管是以什么样的方式对excel进行写操作,操作完成后必须保存
新建工作簿
-
新建工作簿对象
import openpyxl workbook = openpyxl.Workbook()
-
保存
工作簿对象.save(文件路径)
workbook.save('files/student.xlsx')
实际中新建工作簿的时候需要先判断工作簿对应的文件是否已经操作,存在就不需要新建,不存在才新建
-
方法1
try: workbook = openpyxl.open('files/student2.xlsx') except FileNotFoundError: workbook = openpyxl.Workbook() workbook.save('files/student2.xlsx')
-
方法2
import os os.path.exists(文件路径) - 判断指定文件是否存在,存在返回True,不存在返回False if os.path.exists('files/student2.xlsx'): workbook = openpyxl.open('files/student2.xlsx') else: workbook = openpyxl.Workbook() workbook.save('files/student2.xlsx')
工作表的写操作
-
新建工作表
工作簿对象.create_sheet(表名,下载)
workbook.create_sheet() workbook.create_sheet('Python') workbook.create_sheet('Java',0) workbook.save('files/student2.xlsx'
实际中的新建表:没有的时候才新建,有的时候直接打开
if 'Python' in workbook.sheetnames: sheet = workbook['Python'] else: sheet = workbook.create_sheet('Python') workbook.save('files/student2.xlsx')
-
删除工作表
工作簿对象.remove(工作簿对象)
workbook.remove(workbook['Sheet1'])
实际中删除表:存在的时候才能删:
if 'Sheet1' in workbook.sheetnames: workbook.remove(workbook['Sheet1']) workbook.save('files/student2.xlsx')
单元格的写操作
单元格对象.value = 数据
java_sheet = workbook['Java']
java_sheet.cell(1, 3).value = '电话'
java_sheet.cell(2, 1).value = None
java_sheet.cell(4, 2).value = 'stu003'