一、excel文件的读写
微软的Excel的后缀名:.xls .xlsx
.xls
–2007以前的文件后缀名,最多容纳256列16000+行数据
.xlsx
–2007年开始文件使用的后缀名,最多容纳16000+列1048567行数据
Excel 2007开始兼容xls xlsx
后缀名
python能够操作Excel的模块:openpyxl、xlsxwriter、xlwt、pandas、xlrd、xlutils、win32com
等等
旧版本模块:xlwt xlrd
新版本模块:openpyxl
安装三方模块 windows -- pip install xxx
安装模块的两种方法
1、控制台Terminal
2、可视化安装:pycharm --file--settings--project--python Interpreter--'+'--在搜索框中输入模块名称--install
查看已经安装过的模块:pip list
如何安装模块到虚拟环境
1、激活虚拟环境file-settings--Tools---Terminal--shell path---cmd(从下拉框中选择)
控制台中Terminal中
显示venv
则虚拟环境已激活
2、使用 venv/scripts/activate
工作簿:一个Excel
文件就是一个工作簿
工作表:一个工作簿的多张表格
单元格:存储信息的方格
excel
保存文件在最后保存,这是区别于open()
方法的
二、新版Excel写操作
用到的模块:openpyxl
Excel 新建文件Workbook()
如果文件存在 openpyxl.load_workbook(文件路径和文件名)
-
新建一个Excel文件
import openpyxl file=openpyxl.Workbook()
-
操作工作表
# 创建工作表对象:create_sheet(表名,下标) # 如果直接在工作簿中追加工作表,不用写下标 file.create_sheet('学生成绩',0) file.create_sheet('学生成绩1')
# 查看工作簿中已经存在的工作表:sheetnames print(file.sheetnames)
# 移除工作表remove(表名)--表:工作簿对象[工作表] file.remove(file['Sheet'])
-
向工作表中写入数据
# cell(行号,列号)--定位单元格 value--获取单元格的内容 # 定位单元格的方法: # 1.使用cell()定位行号和列号;2.使用列号行号定位单元格 两种形式查看数据都需要用value file['学生成绩'].cell(1,1).value='姓名' file['学生成绩'].cell(1,2).value='性别' print(file['学生成绩'].cell(1, 2).value) file['学生成绩']['AA1']='姓名' print(file['学生成绩']['AA1'].value)
-
保存文件
# 保存文件 file.save('./学生成绩.xlsx')
三、新版Excel读操作
用到的模块:openpyxl
max_row
–获取xlsx
文件中最大行数
max_column
–获取xlsx
文件中最大列数
import openpyxl
# 加载xlsx文件
file=openpyxl.load_workbook('./成都链家二手房.xlsx')
# 从工作簿中找工作表
ws=file['成都链家二手房数据汇总']
rows=ws.max_row
col=ws.max_column
for i in range(1,rows+1):
for j in range(1,col+1):
print(ws.cell(i,j).value)
四、csv
文件数据写入xlsx
-
新建
xlsx
文件,用于存放从csv
文件中读取的数据 -
新建工作表
-
从源文件读数据
import os import csv import openpyxl # 新建xlsx文件 用于存放从csv文件中读出来的数据 file=openpyxl.Workbook() # 新建工作表 file.create_sheet('成都链家二手房数据汇总') # --------------------------------- # 从源文件读数据 # lisdir():能够读取指定文件夹下的所有子文件 file_list=os.listdir('./data') print(file_list) # 闯将一个变量count,作用计算,进行行号的递增 count=0 for i in file_list: if i[-9:]=='二手房信息.csv' and i[:2]=='成都': # 返回文件对象 f=open(f'./data/{i}','r',encoding='utf-8') # 读数据 read_data=csv.reader(f) for j in read_data: count += 1 # excel 只能一个单元格的写,不能整行写 for x in range(0,len(j)): # 根据每一条数据长度判断写n列 file['成都链家二手房数据汇总'].cell(count,x+1).value=j[x] f.close() file.save('./成都链家二手房.xlsx') print('打印完成!')
五、旧版Excel读写操作
用到的模块:xlwt(xls写),xlrd(xls读)
模块的安装:pip install xlwt xlrd
-
写
a. 创建文件
b. 创建调用工作表—add_sheet(工作表名字)
c. 写入数据
d. 保存文件
import xlwt import random # 创建文件 wb=xlwt.Workbook() # 创建调用工作表 add_sheet(工作表名字) sheet1=wb.add_sheet('一年级一班成绩') sheet2=wb.add_sheet('一年级二班成绩') sheet3=wb.add_sheet('一年级三班成绩') # 写入数据--write(行,列,value) names=['lili','nana','cindy','linda'] for i in range(len(names)): sheet1.write(i,0,names[i]) for j in range(1,4): # 工作表.write(row,col,content) sheet1.write(i,j,random.randint(0,100)) # 保存文件 wb.close()
-
读
a. 打开文件
b. 选择工作表
sheet_names()--查看存在的所有工作表 sheet_by_index()--索引 sheet_by_name()--通过工作表名字
c. 获取数据
d. 保存文件
import xlrd # 打开文件 wb=xlrd.open_workbook('./test/一年级成绩表.xls') # 选择工作表 # sheet_names()--查看存在的所有工作表 print(wb.sheet_names()) # sheet_by_index()--索引 # sheet_by_name()--通过工作表名字 ws=wb.sheet_by_index(0) print(ws.cell(0,0).value) ws1=wb.sheet_by_name('一年级一班成绩') print(ws1.cell(0,0).value) # 获取行列数 nrows ncols print(ws1.nrows,ws1.ncols) wb.close()
注意 :openpyxl
和```xlwt、xlrd``的区别
openpyxl
行列号从1开始,xlwt、xlrd
行列号从0开始- 两者都可以对工作表进行操作
- 两者都可以用单元格定位的形式进行单元格操作
xlwt
写操作使用write()
写