Day9 Excel的读写
微软的Excel
后缀名:.xls、.xlsx
- .xls:Excel 2007以前的文件后缀名。最多容纳256列和16384行数据。
- .xlsx:Excel 2007开始文件使用的后缀名。最多容纳16384列和1048576行数据。
- Excel 2007开始兼容xls\xlsx后缀名。 ----> openpyxl
1. python能够操作Excel的模块:
openpyxl、xlsxwriter、xlwt、pandas、xlrd、win32com、xlutils等
a. 安装三方模块
- windows:pip install xxx
- mac、linux:pip3 install xxx
b.如何安装模块到虚拟环境:
- 1.激活虚拟环境。
- 2.(venv) --> 虚拟环境已激活
使用 ./venv/scripts/activate 进行虚拟环境激活
报错:微软禁用了终端脚本的功能。
使用命令Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser解除禁用
再次执行 ./venv/scripts/activate
c.查看已经安装过的模块:pip list
- 工作簿:一个Excel文件就是一个工作簿
- 工作表:一个工作簿的多张表格
- 单元格:存储信息的方格
2. 对Excel表的操作
2.1.新建一个Excel文件
新建文件:Workbook()
import openpyxl
file = openpyxl.Workbook() # 加载工作簿
如果文件存在:openpyxl.load_workbook(文件路径和文件名)
2.2.操作工作表
一个工作表对象:create_sheet(表名, 下标)
如果直接在工作簿最后追加工作表,下标参数不用写;如下:
file.create_sheet(‘学生成绩1’)
file.create_sheet('学生成绩', 0)
查看工作簿中已经存在的工作表:sheetnames
print(file.sheetnames)
移除工作表:remove(表) --> 表:工作簿对象[工作表]
file.remove(file['Sheet'])
从学生成绩工作表插入信息
方法一:使用cell(行号,列号)定位单元格
cell(行号,列号) --> 定位单元格
value --> 获取单元格的内容
print(file['学生成绩'].cell(1, 1).value)
file['学生成绩'].cell(1, 1).value = '姓名'
print(file['学生成绩'].cell(1, 1).value)
file['学生成绩'].cell(1, 2).value = '性别'
方法二:使用[列号,行号]定位单元格
file['学生成绩']['AAA1'] = '姓名'
print(file['学生成绩']['AAA1'].value)
保存文件(在最后保存)
file.save('./学生成绩.xlsx')
运行结果
Excel文档的结果
3. CSV文件数据写入
import os
import csv
import openpyxl
# 新建xlsx后缀名文件
file = openpyxl.Workbook()
file.create_sheet('成都链家二手房数据汇总')
# -----------------------------------------------
# 从原数据文件读数据
# listdir():能够读取指定文件夹下的所有子文件
file_list = os.listdir('./成都链家二手房数据')
print(file_list)
# count作用:计数进行行号的递增
count = 0
for i in file_list:
if i[-9:] == '二手房信息.csv' and i[:2] == '成都':
f = open(f'./成都链家二手房数据/{i}', 'r', encoding='utf-8')
read_data = csv.reader(f)
for j in read_data:
count += 1
for x in range(0, len(j)):
# 根据每一条数据长度判断写n列
file['成都链家二手房数据汇总'].cell(count, x+1).value =j[x]
f.close()
# -----------------------------------------------
file.save('./成都链家二手房.xlsx')
print('数据写入完成')
运行结果
4. Excel读-xlsx版
import openpyxl
# max_row
# max_col
file = openpyxl.load_workbook('./成都链家二手房.xlsx')
# 从工作簿中找工作表
ws = file['成都链家二手房数据汇总']
# max_row:获取xlsx文件中最大行数
rows = ws.max_row
# max_column:获取xlsx文件中最大列数
col = ws.max_column
# 行
for i in range(1, rows + 1):
# 列
for j in range(1, col + 1):
print(ws.cell(i, j).value)
运行结果(数据较长,截取的最后部分)
注:Excel操作会比CSV文件要慢很多,而且CSV会更加强大,建议大家日后使用CSV文件来操作。
Day 9 over!