Python读写EXCEL文件常用方法大全

前言

python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别,这里我主要介绍几个常用的方式。

用xlrd和xlwt进行excel读写;

用openpyxl进行excel读写;

用pandas进行excel读写;

参考:

https://www.python-excel.org/

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html#pandas.read_excel

https://www.jianshu.com/p/19219542bf23

数据准备

为了方便演示,我这里新建了一个data.xls和data.xlsx文件,第一个工作表sheet1区域“A1:E5”的内容如下,用于测试读写excel的代码:

xlrd和xlwt

xlrd是一个库,用于从Excel文件中以.xls格式读取数据和格式化信息

xlwt是一个库,用于将数据和格式化信息写入较旧的Excel文件(例如:.xls)。

示例

pip install xlrd

pip install xlwt

​我们开始来读取文件的内容

import xlrd

import os

file_path = os.path.dirname(os.path.abspath(__file__))

base_path = os.path.join(file_path, 'data.xlsx')

book = xlrd.open_workbook(base_path)

sheet1 = book.sheets()[0]

nrows = sheet1.nrows

print('表格总行数', nrows)

ncols = sheet1.ncols

print('表格总列数', ncols)

row3_values = sheet1.row_values(2)

print('第3行值', row3_values)

col3_values = sheet1.col_values(2)

print('第3列值', col3_values)

cell_3_3 = sheet1.cell(2, 2).value

print('第3行第3列的单元格的值:', cell_3_3)

​接下来我们来进行写入,写入可以进行的操作太多了,我这里只列举了常用的的操作。

import datetime

# 创建一个workbook 设置编码

workbook = xlwt.Workbook(encoding='utf-8')

# 创建一个worksheet

worksheet = workbook.add_sheet('Worksheet')

# 写入excel参数对应 行, 列, 值

worksheet.write(0, 0, label='测试')

# 设置单元格宽度

worksheet.col(0).width = 3333

# 设置单元格高度

tall_style = xlwt.easyxf('font:height 520;')

worksheet.row(0).set_style(tall_style)

# 设置对齐方式

alignment = xlwt.Alignment()  # Create Alignment

# May be: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED

alignment.horz = xlwt.Alignment.HORZ_CENTER

# May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED

alignment.vert = xlwt.Alignment.VERT_CENTER

style = xlwt.XFStyle()  # Create Style

style.alignment = alignment  # Add Alignment to Style

worksheet.write(2, 0, '居中', style)

# 写入带颜色背景的数据

pattern = xlwt.Pattern()  # Create the Pattern

# May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12

pattern.pattern = xlwt.Pattern.SOLID_PATTERN

pattern.pattern_fore_colour = 5  # May be: 8 through 63. 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow , almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray, the list goes on...

style = xlwt.XFStyle()  # Create the Pattern

style.pattern = pattern  # Add Pattern to Style

worksheet.write(0, 1, '颜色', style)

# 写入日期

style = xlwt.XFStyle()

# Other options: D-MMM-YY, D-MMM, MMM-YY, h:mm, h:mm:ss, h:mm, h:mm:ss, M/D/YY h:mm, mm:ss, [h]:mm:ss, mm:ss.0

style.num_format_str = 'M/D/YY'

worksheet.write(0, 2, datetime.datetime.now(), style)

# 写入公式

worksheet.write(0, 3, 5)  # Outputs 5

worksheet.write(0, 4, 2)  # Outputs 2

# Should output "10" (A1[5] * A2[2])

worksheet.write(1, 3, xlwt.Formula('D1*E1'))

# Should output "7" (A1[5] + A2[2])

worksheet.write(1, 4, xlwt.Formula('SUM(D1,E1)'))

# 写入超链接

worksheet.write(1, 0, xlwt.Formula('HYPERLINK("http://www.baidu.com";"百度一下")'))

# 保存

workbook.save('Excel_test.xls')

需要注意的是最好在当前路径下通过命令行执行,否则无法生成文件。

​​

openpyxl

openpyxl是一个Python库,用于读取/写入Excel 2010 xlsx/xlsm/xltx/xltm文件。

安装包

pip install openpyx

安装完成可以开始进行读取数据

import openpyxl

import os

file_path = os.path.dirname(os.path.abspath(__file__))

base_path = os.path.join(file_path, 'data.xlsx')

workbook = openpyxl.load_workbook(base_path)

worksheet = workbook.get_sheet_by_name('Sheet1')

row3=[item.value for item in list(worksheet.rows)[2]]

print('第3行值',row3)

col3=[item.value for item in list(worksheet.columns)[2]]

print('第3行值',col3)

cell_2_3=worksheet.cell(row=2,column=3).value

print('第2行第3列值',cell_2_3)

max_row=worksheet.max_row

print('最大行',max_row)


​现在我们来开始写入数据

import openpyxl

import datetime

from openpyxl.styles import Font, colors, Alignment

#实例化

workbook = openpyxl.Workbook()

# 激活 worksheet

sheet=workbook.active

#写入数据

sheet['A1']='python'

sheet['B1']='javascript'

#写入时间

sheet['A2'] = datetime.datetime.now().strftime("%Y-%m-%d")

# 第2行行高

sheet.row_dimensions[2].height = 40

# B列列宽

sheet.column_dimensions['B'].width = 30

# 设置A1中的数据垂直居中和水平居中

sheet['A1'].alignment = Alignment(horizontal='center', vertical='center')

# 下面的代码指定了等线24号,加粗斜体,字体颜色黄色。直接使用cell的font属性,将Font对象赋值给它。

bold_itatic_24_font = Font(name='等线', size=24, italic=True, color='00FFBB00', bold=True)

sheet['B1'].font = bold_itatic_24_font

# 合并单元格, 往左上角写入数据即可

sheet.merge_cells('A2:B2') # 合并一行中的几个单元格

# 拆分单元格

# sheet.unmerge_cells('A2:B2')

#保存

workbook.save('new.xlsx')

​​

pandas

pandas支持xls, xlsx, xlsm, xlsb, odf, ods和odt文件扩展名从本地文件系统或URL读取。支持读取单个工作表或工作表列表的选项。

首先依然是安装包

pip install pandas

语法:

pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False,dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)

io,Excel的存储路径

sheet_name,要读取的工作表名称

header, 用哪一行作列名

names, 自定义最终的列名

index_col, 用作索引的列

usecols,需要读取哪些列

squeeze,当数据仅包含一列

converters ,强制规定列数据类型

skiprows,跳过特定行

nrows ,需要读取的行数

skipfooter , 跳过末尾n行

import pandas as pd

import os

file_path = os.path.dirname(os.path.abspath(__file__))

base_path = os.path.join(file_path, 'data.xlsx')

df = pd.read_excel(base_path)

print(df)

写入数据

语法:

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)

参数说明:

excel_writer:文件路径或现有的ExcelWriter

sheet_name:将包含数据文件的工作表的名称

na_rep:缺失的数据表示

float_format:格式化浮点数的字符串。例如float_format = " %。2f"格式为0.1234到0.12。

columns:列

header:写出列名。如果给定一个字符串列表,则假定它是列名的别名。

index:写入行名称(索引)

index_label:如果需要,索引列的列标签。如果未指定,并且标头和索引为真,则使用索引名。如果DataFrame使用多索引,应该给出一个序列。

startrow:左上角的单元格行转储数据帧。

startcol:左上角单元格列转储数据帧。

engine:编写要使用的引擎“ openpyxl”或“ xlsxwriter”。 您还可以通过选项io.excel.xlsx.writer,io.excel.xls.writer和io.excel.xlsm.writer进行设置。

merge_cells:将多索引和层次结构行写入合并单元格。

encoding:对生成的excel文件进行编码。仅对xlwt有必要,其他编写器本身支持unicode。

inf_rep:表示无穷大。

verbose:在错误日志中显示更多信息。

freeze_panes:指定要冻结的最底部的行和最右边的列

from pandas import DataFrame

data = {'name': ['张三', '李四', '王五'],'age': [11, 12, 13],'sex': ['男', '女', '男']}

df = DataFrame(data)

df.to_excel('file.xlsx')

​​

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理

想要获取更多Python学习资料可以加

QQ:2955637827私聊

或加Q群630390733

大家一起来学习讨论吧!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容