python- csv、excel
一、什么是csv文件
csv文件叫逗号分隔值文件 - 每一行内容是通过逗号来区分出不同的列
csv文件可以直接通过Excel打开,以行列的形式保存和显示数据,但是相对Excel文件,它只能存储数据,不能保存公式和函数
补充:with open() as 文件对象: - 自动关闭
1.csv操作
1)打开csv文件
2)创建reader对象,获取文件内容
csv.reader(文件对象) - 获取文件内容,并且以列表为单位返回每一行内容
csv.DictReader(文件对象) - 获取文件内容,并且以字典为单位返回第二行开始的每一行内容(字典的键是第一行内容)
# 练习:计算拉钩数据中,各个城市数据分析岗位的平均薪资
# 获取文件内容
from re import findall
with open('file/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))
2.csv写操作
1.打开文件
import csv
f = open(‘./file/date.csv’, ‘w’, encoding=‘utf-8’, newline=‘’)
2.创建writer对象
csv.writer(文件对象) - 创建writer对象,这个对象在写入数据的时候一行对应一个列表
csv.DictWriter(文件对象,键列表) - 创建writer对象,以字典为单位写入数据
================以列表为单位写入一行内容
f = open('./file/date.csv', 'w', encoding='utf-8', newline='')
w = csv.writer(f)
一次写入一行内容
w.writerow('66')
一次写入多行内容
w.writerows([
['123', '456'],
['55', '55']
])
===================以字典为单位写入一行内容
写入文件头(将字典的键写入到文件开头)
w.writeheader()
一次写一行
w.writerow({'xm':'ww', 'rq':'2008'})
一次写多行
w.writerows([
{'xm':'ww', 'rq':'2008'},
{'xm':'wu', 'rq':'2008'}
])
#### 3.匹配次数
二、创建虚拟环境
1.系统环境 - 安装python就可以为计算机提供一个系统环境
2.虚拟环境 - 程序员根据需要自己创建的python环境
能够创建虚拟环境的前提是存在系统环境
3.环境的作用:
提供python解释器
提供第三方库
虚拟环境的存在可以让第三方库根据类别或者项目分开管理
4.使用虚拟环境的建议
工作的时候:一个项目一个虚拟环境,并且将虚拟环境放在项目中
学习的时候:一类项目一个虚拟环境,不同类别的虚拟环境全部放在一个地方
5.怎么创建虚拟环境
使用pycharm
使用指令创建
三、excel
1.认识Excel文件
1.工作簿 - 一个Excel文件就是一个工作簿
工作表 - 多个工作表组成一个工作簿,至少一个
单元格 - 保存数据的基本单位
行号、列号 - 确定单元格位置 (行1列A)
2.获取excel文件内容
1).打开excel文件创建工作簿对象
openpyxl.open(excel文件路径)
openpyxl.load_workbook(excel文件路径)
wk = openpyxl.open('file/三国人物数据.xlsx')
# openpyxl.load_workbook('file/三国人物数据.xlsx')
# 获取工作簿中所有的工作表的表名
res = wk.sheetnames
2).获取工作表
工作簿对象.active - 获取活跃表(默认选中的那个) 一般不用
工作簿对象[工作表名称] - 获取指定工作表
sheet1 = wk['三国武将数据']
sheet2 = wk['三个国家的武力']
3).获取单元格
工作表对象.cell(行号,列号)
cell1 = sheet1.cell(8, 1)
print(cell1)
4).获取单元格内容
单元格对象.value
print(cell1.value)
5).获取最大行号列号(保存了数据的有效行列)
# sheet1.max_row
# sheet1.max_column
print(sheet1.max_row)
print(sheet1.max_column)
print(sheet2.max_row)
# 获取第一列所有数据
column1 = []
for row in range(1, sheet2.max_row+1):
cell = sheet2.cell(row, 1)
column1.append(cell.value)
print(column1)
# 获取第一列到第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)
2.工作表的写操作
注意:不管是以什么样的写操作方式操作Excel,操作完成后都需要保存
1.新建工作簿
1)新建工作簿对象
workbook = openpyxl.Workbook()
2)保存
工作簿对象.save()
workbook.save(‘file/stu.xlsx’)
# 实际中新建工作簿的时候需要先判断工作簿对应的文件是否已经存在,存在就不需要新建,否则会覆盖
workbook = openpyxl.open('file/stu.xlsx')
# 方法一:
try:
workbook = openpyxl.open('file/stu.xlsx')
except FileNotFoundError:
workbook = openpyxl.Workbook()
workbook.save('file/stu.xlsx')
方法二:
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(‘py’, 0)
workbook.save(‘file/stu.xlsx’)
# 实际中新建表:没有才新建,有就直接打开
if 'Python' in workbook.sheetnames:
sheet = workbook['Python']
else:
sheet = workbook.create_sheet('Python')
workbook.save('files/student2.xlsx')
删除工作表
工作对象.remove(工作表对象)
workbook.remove(workbook[‘Sheet’])
workbook.save(‘file/stu.xlsx’)
实际中删除表,存在才删
if 'Sheet1' in workbook.sheetnames:
workbook.remove(workbook['Sheet1'])
workbook.save('files/student2.xlsx')
3.单元格的写操作
单元格对象.value = 数据(若数据是空则删除)
py_sheet = workbook['py']
py_sheet.cell(5, 3).value = '112'
workbook.save('file/stu.xlsx')