Python Excel

Python处理Excel

记录一下Python处理Excel的一些常用库及其用法

Hannah
2021-06-24
6 min

# 一、读取xls——xlrd

xlrd 官方文档

# 1.安装

pip install xlrd

# 2.使用示例

import xlrd

# 打开Excel
data = xlrd.open_workbook(file_path)

# 打开第一张表
table = data.sheets()[0]

# 获取表的行数
nrows = table.nrows

# 循环逐行打印
for row_index in range(nrows):

    # 跳过第一行(大多数为表头)
    if row_index == 0:
        continue

    # 获取每一行的值,类型为 list
    row_value = table.row_values(row_index)
    print(row_value)

# 3.常用函数

# ① 表相关

# 通过索引顺序获取表对象
table = data.sheets()[sheet_index]          
table = data.sheet_by_index(sheet_index))

# 通过表名称名称获取表对象
table = data.sheet_by_name(sheet_name)

# 返回工作簿中所有工作表的名字
names = data.sheet_names()

# 检查某个sheet是否导入完毕
data.sheet_loaded(sheet_name or sheet_indx) 

# ② 行相关

# 返回该表中的有效行数
nrows = table.nrows
  
# 返回由该行中所有的单元格对象组成的列表
table.row(row_index)
table.row_slice(row_index)

# 返回由该行中所有单元格的数据组成的列表
table.row_values(row_index, start_colx = 0, end_colx = None)

#返回该列的有效单元格长度
table.row_len(row_index)

# ③ 列相关

# 返回列表的有效列数
ncols = table.ncols

#返回由该列中所有的单元格对象组成的列表
table.col(colx, start_rowx=0, end_rowx=None)  
table.col_slice(colx, start_rowx=0, end_rowx=None)

# 返回由该列中所有单元格的数据组成的列表
table.col_values(colx, start_rowx = 0, end_rowx = None)   

# ④ 单元格相关

# 返回单元格对象
table.cell(rowx,colx)      

# 返回单元格中的值
table.cell_value(rowx,colx)

# 二、写入xls——xlwt

xlwt 官方文档

# 1.安装

pip install xlwt

# 2.使用示例

import xlwt

# 创建工作簿,默认编码为 ASCII,可自定义为其他编码,如下编码为 utf-8
workbook = xlwt.Workbook(encoding = 'utf-8')

# 添加工作表
worksheet = workbook.add_sheet('sheet1')

# 写入数据
worksheet.write(0, 0, label = 'test')

# 保存文件到 file_path
workbook.save('test.xls')

# 3.常用函数

# 通过表名添加表
worksheet = workbook.add_sheet(sheet_name)

# 保存文件
workbook.save(filename_or_stream)

# 写入数据,r为行数,c为列数,label为数据,style 为该单元格样式
worksheet.write(r, c, label='', style=<xlwt.Style.XFStyle object>)

# 三、读写xlsx——openpyxl

openpyxl 官方文档

# 1.安装

pip install openpyxl

# 2.使用示例

# ① 读取

from openpyxl import load_workbook

# 打开Excel
wb = load_workbook(file_path)

# 获取当前被激活的工作薄
sheet = wb.active  

# 获取表的行数和列数
nrows = sheet.max_row
ncols = sheet.max_cols

# 循环逐个打印
# 下标从1开始计算,从2开始循环略过表头
for row_index in range(2, nrows + 1):
    for col_index in range(1,ncols + 1):
        cell = sheet.cell(row=row_index, column=col_index).value
        print(cell)

# ② 写入

from openpyxl import Workbook

# 创建工作簿
wb = Workbook()

# 创建工作表
sheet = wb.create_sheet('Sheet1', 0)

# 定义标题行(下标从1开始)
sheet.cell(1, 1, 'username')
sheet.cell(1, 2, 'phone')
sheet.cell(1, 3, 'remarks')

# 将数据以行的形式添加到工作薄中,也可以用cell()循环插入
insert_data = [
    ['test1', '123456', '测试'],
    ['test2', '123457', '测试'],
    ['test3', '123458', '测试']
]
for item in insert_data:
    sheet.append(row)

# 3. 保存工作表
wb.save('test.xlsx')

# 3.常用函数

# ① 表相关

# 新建工作表
# 默认插入到最后
wb.create_sheet(sheet_name)
# 插入到最前
wb.create_sheet(sheet_name, 0)

# 返回一个工作表对象
wb[sheet_name]
wb.get_sheet_by_name(sheet_name)

# 返回所有表名
wb.sheetnames

# ② 行列相关

# 返回最大行
sheet.max_row

# 返回所有行,可循环访问
sheet.rows

# 返回最大列
sheet.max_column

# 返回所有列行,可循环访问
sheet.columns

# ③ 单元格相关

# 返回单元格的值
sheet.cell(row=row_index, column=col_index).value

# 设置单元格的值
sheet.cell(row_index, col_index).value = 'test'
sheet.cell(row_index, col_index, 'test')

# 四、读写csv——csv

csv 官方文档(python2.7) csv 官方文档(python3.8)

# 1.使用示例

# ① 读取

import csv

# 打开文件
f = open('test.csv', 'r')

with f:
    # 读取文件
    reader = csv.reader(f)
    for row in reader:
        for item in row:
            print(item)

# ② 写入

import csv

insert_data = [
    ['test1', '123456', '测试'],
    ['test2', '123457', '测试'],
    ['test3', '123458', '测试']
]

# 打开文件
f = open('test2.csv', 'w')

with f:
    # 写入数据
    writer = csv.writer(f)
    for row in insert_data:
        writer.writerow(row)

# 2. 常用函数

# 常规读取
reader = csv.reader(f)

# 根据分隔符(如'|')读取 
reader = csv.reader(f, delimiter='|')

# 读取后映射成字典
reader = csv.DictReader(f)
for row in reader:
    print(row['username'], row['phone'], row['remarks'])

# 常规写入
writer = csv.writer(f)

# 按行写入
writer.writerow(row)

# 一次性写入所有行
writer.writerows(insert_data)

# 用python字典写入 fieldnames 为表头
writer = csv.DictWriter(f, fieldnames=['username', 'phone', 'remarks'])
writer.writeheader()
writer.writerow({'username' : 'test1', 'phone': '123456', 'remarks': '测试'})
Last Updated: 2/25/2022, 10:24:15 AM