python学习的第二十三天:对Excel文件的操作

python学习的第二十三天:对Excel文件的操作

需要用到的工具

三方库:

  • xlrd / xlwt / xlutils —> 兼容低版本的Excel文件(xls)
  • openpyxl —> Office 2007+ —> xlsx

Excel的读写操作

使用xlrd读取Excel文件
import xlrd

# 工作簿 ---> 一个Excel文件 ---> Book
wb = xlrd.open_workbook('resources/阿里巴巴2020年股票数据.xls')
print(type(wb))
# 获取所有工作表的名字
print(wb.sheet_names())
# 获取指定的工作表 ---> Sheet
# sheet = wb.sheet_by_name('股票数据')
sheet = wb.sheet_by_index(0)
print(type(sheet))
# 获取工作表的行数和列数
print(sheet.nrows, sheet.ncols)
# 获取指定的行 ---> list[Cell]
print(sheet.row(0))
print(sheet.row_slice(0, start_colx=0, end_colx=3))
# 获取指定的列 ---> list[Cell]
print(sheet.col(4))
print(sheet.col_slice(4, start_rowx=1, end_rowx=11))
# 获取单元格的数据 ---> Cell ---> value
cell = sheet.cell(2, 2)
print(type(cell))
print(cell.value)
# 遍历整个表单
print(f'交易日期\t\t\t最高价\t\t最低价\t\t开盘价\t\t收盘价\t\t成交量\t\t调整收盘价')
for row in range(1, sheet.nrows):
    for col in range(sheet.ncols):
        value = sheet.cell(row, col).value
        if col == 0:
            # year, month, date, *_ = xlrd.xldate_as_tuple(value, 0)
            # print(f'{year}年{month:0>2d}月{date:0>2d}日', end='\t')
            curr_date = xlrd.xldate_as_datetime(value, 0)
            print(curr_date.strftime('%Y年%m月%d日'), end='\t')
        elif col == 5:
            print(f'{int(value):<10d}', end='\t')
        else:
            print(f'{value:.4f}', end='\t')
    print()
使用openpyxl读取Excel文件
import datetime
import openpyxl

# 加载一个工作簿 ---> Workbook
wb = openpyxl.load_workbook('resources/阿里巴巴2020年股票数据.xlsx')
print(type(wb))
# 获取工作表的名字
print(wb.sheetnames)
# 获取工作表 ---> Worksheet
sheet = wb.worksheets[0]
print(type(sheet))
# 获得单元格的范围
print(sheet.dimensions)
# 获得行数和列数
print(sheet.max_row, sheet.max_column)

# 获取指定单元格内数据的方法
print(sheet.cell(3, 3).value)
print(sheet['C3'].value)
print(sheet['G255'].value)

# 对Excel文件进行遍历
for row_ch in range(2, 256):
    for col_ch in 'ABCDEFG':
        value = sheet[f'{col_ch}{row_ch}'].value
        if type(value) == datetime.datetime:
            print(value.strftime('%Y年%m月%d日'), end='\t')
        elif type(value) == int:
            print(f'{value:<10d}', end='\t')
        elif type(value) == float:
            print(f'{value:.4f}', end='\t')
        else:
            print(value, end='\t')
    print()
通过xlwt对Excel进行写操作
import random

import xlwt

# 第一步:创建工作簿(Workbook)
wb = xlwt.Workbook()

# 第二步:添加工作表(Worksheet)
sheet = wb.add_sheet('期末成绩')  # type: xlwt.Worksheet

# 第三步:向单元格写入数据
# 美化单元格
header_style = xlwt.XFStyle()
header_pattern = xlwt.Pattern()
header_pattern.pattern = xlwt.Pattern.SOLID_PATTERN
# 指定单元格颜色
header_pattern.pattern_fore_colour = xlwt.Style.colour_map['aqua']
header_style.pattern = header_pattern
# 指定单元格字体样式
header_font = xlwt.Font()
header_font.height = 20 * 22
header_font.bold = True
header_style.font = header_font
# 指定单元格文本对齐方式
header_alignment = xlwt.Alignment()
header_alignment.vert = xlwt.Alignment.VERT_CENTER
header_alignment.horz = xlwt.Alignment.HORZ_CENTER
header_style.alignment = header_alignment

titles = ('姓名', '语文', '数学', '英语')
for col_index, title in enumerate(titles):
    sheet.write(0, col_index, title, header_style)

names = ('小明', '小红', '小亮', '小李', '小王')
# 写入5个学生3门课程的成绩,成绩用50-100的随机数表示
for row_index, name in enumerate(names):
    sheet.write(row_index + 1, 0, name)
    for col_index in range(1, 4):
        sheet.write(row_index + 1, col_index, random.randrange(50, 101))

# 第四步:保存工作簿
wb.save('resources/一年级二班考试成绩表.xls')
通过openpyxl对Excel进行写操作
import random

import openpyxl

# 第一步:创建工作簿(Workbook)
wb = openpyxl.Workbook()

# 第二步:添加工作表(Worksheet)
# sheet = wb.create_sheet('期末成绩')
sheet = wb.active
sheet.title = '期末成绩'

titles = ('姓名', '语文', '数学', '英语')
for col_index, title in enumerate(titles):
    sheet.cell(1, col_index + 1, title)

names = ('小明', '小红', '小亮', '小李', '小王')
# 写入5个学生3门课程的成绩,成绩用50-100的随机数表示
for row_index, name in enumerate(names):
    sheet.cell(row_index + 2, 1, name)
    for col_index in range(1, 4):
        sheet.cell(row_index + 2, col_index + 1, random.randrange(50, 101))

# 第四步:保存工作簿
wb.save('resources/一年级二班考试成绩表.xlsx')

小工具datatime

from datetime import datetime

# 默认为年月日时分秒,不输入默认为0
date1 = datetime(1990, 5, 3)
print(date1)
date2 = datetime(1998, 6, 8, 23, 58, 17)
print(date2)
# 获取当前计算机的时间
date3 = datetime.now()
print(date3)

# 两个日期相减会得到时间差对象(timedelta)
delta = date3 - date1
print(delta, type(delta))
# 获取两个日期相差的天数和秒数
print(delta.days, delta.seconds)

# 格式化时间日期
print(date2.strftime('%Y年%m月%d日 %H时%M分%S秒'))

# 两个日期相减会得到时间差对象(timedelta)
delta = date3 - date1
print(delta, type(delta))
# 获取两个日期相差的天数和秒数
print(delta.days, delta.seconds)

# 格式化时间日期
print(date2.strftime('%Y年%m月%d日 %H时%M分%S秒'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏墟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值