python to_excel新增sheet_Python 与 Excel 不得不说的事

数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件。因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道。

如果仅仅是要以表单形式保存数据,可以借助 CSV 格式(一种以逗号分隔的表格数据格式)进行处理,Excel 也支持此格式。但标准的 Excel 文件(xls/xlsx)具有较复杂的格式,并不方便像普通文本文件一样直接进行读写,需要借助第三方库来实现。

常用的库是 python-excel 系列:

xlrd、xlwt、xlutils

  • xlrd - 读取 Excel 文件
  • xlwt - 写入 Excel 文件
  • xlutils - 操作 Excel 文件的实用工具,如复制、分割、筛选等

尽管这是目前被用得最多的 Excel 库,我还是很想吐槽为什么这三个包不能放在一个模块里……另外它们有个缺陷,就是只能处理 xls 文件。如果你想用新版本的 xlsx,可以考虑 openpyxl 和 xlsxwriter。

不过今天只说说这三个。

(更新:有人提到另外几个 Python 处理 Excel 的库,有些的确会比 python-excel 系列好用。之后会再做一篇对比,敬请期待。

另外,关于为什么不用 VBA、Java、C#……处理 Excel。其实本文的出发点是对于 Python 使用者来说,操作 Excel 的一种基本方式,并非否定其他语言和方法。)

安装

安装的方法没啥特别的,只是得装三遍。可以下载安装包、下载代码压缩包、或者通过 pip 等。可参考 如何安装 Python 的第三方模块 - Crossin的编程教室 - 知乎专栏

如果安装过之前推荐的 anaconda,那么就已经有了 xlrd 和 xlwt,但 xlutils 没有附带在安装包中,使用时仍需另行安装。

读取

结合一段简单的代码来看:

import xlrd# 打开 xls 文件book = xlrd.open_workbook("test.xls")print "表单数量:", book.nsheetsprint "表单名称:", book.sheet_names()# 获取第1个表单sh = book.sheet_by_index(0)print u"表单 %s 共 %d 行 %d 列" % (sh.name, sh.nrows, sh.ncols)print "第二行第三列:", sh.cell_value(1, 2)# 遍历所有表单for s in book.sheets():    for r in range(s.nrows):        # 输出指定行        print s.row(r)

输出结果:

表单数量: 2
表单名称: [u'Group.A', u'Group.B']
表单 Group.A 共 7 行 3 列
第二行第三列: 15.0
[text:u'Rank', text:u'Team', text:u'Points']
[number:1.0, text:u'Brazil', number:15.0]
[number:2.0, text:u'Russia', number:12.0]
...

常用的方法:

  • open_workbook 打开文件
  • sheet_by_index 获取某一个表单
  • sheets 获取所有表单
  • cell_value 获取指定单元格的数据

写入

还是看代码:

import xlwt# 创建 xls 文件对象wb = xlwt.Workbook()# 新增一个表单sh = wb.add_sheet('A Test Sheet')# 按位置添加数据sh.write(0, 0, 1234.56)sh.write(1, 0, 8888)sh.write(2, 0, 'hello')sh.write(2, 1, 'world')# 保存文件wb.save('example.xls')

生成文件:

4fc53410633d67b1dae31197878fdee0.png

常用的方法:

  • Workbook 创建文件对象
  • add_sheet 新增一个表单
  • write 在指定单元格写入数据

修改

很遗憾,并没有直接修改 xls 文件的方法。通常的做法是,读取出文件,复制一份数据,对其进行修改,再保存。

在复制时,需要用到 xlutils 中的方法。

from xlrd import open_workbookfrom xlutils.copy import copy# 打开文件rb = open_workbook("example.xls")# 复制wb = copy(rb)# 选取表单s = wb.get_sheet(0)# 写入数据s.write(0, 1, 'new data')# 保存wb.save('example.xls')

修改后文件:

df96eb0d32fef6790fc4a5cd4fe01f5d.png

特别要注意的是,选取读取表单时,要使用 sheet_by_index,而在选取写入表单时,则要用 get_sheet。不要问我为什么,我也很想知道这么设定的用意何在……

时间转换

如果表单中有时间格式的数据,通过处理之后,你会发现时间数据出了差错。

7e68769e44e6d005e1390e97b32844c5.png
0a9ae7210c42f452fb7ba4f3f760589a.png

输出单元格内容:

[number:8888.0, xldate:42613.0]

因为这里 xldate 有自己的格式定义。如果要使用正确的格式,必须转换:

new_date = xlrd.xldate.xldate_as_datetime(date, book.datemode)

date 是对应单元格的数据,book 是打开的文件对象。

另外,在打开文件时,加上参数 formatting_info=True,可以保证在时间数据在 copy 时保持原样。

写入时间数据,则可通过此方法创建 excel 的时间对象:

xlrd.xldate.xldate_from_datetime_tuple

或者通过 xlwt.easyxf 指定时间格式:

style = xlwt.easyxf(num_format_str='D-MMM-YY')ws.write(1, 0, datetime.now(), style)

具体细节及更多功能这里不展开说明。

以上便是 Python 操作 Excel 文件的一些基本方法。实际使用过程中遇到问题或者需要了解更多功能,永远记住两个词:

RTFMSTFW

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python,可以使用pandas库的DataFrame.to_excel方法将数据保存为Excel文件。该方法的语法如下: 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) 以下是一个使用pandas导出数据到Excel表的简单示例代码: ```python import pandas as pd df = pd.DataFrame({"a": \[1, 2, 3, 4\], "b": \[5, 6, 7, 8\]}) df.to_excel("pf.xlsx") ``` 这段代码将DataFrame对象保存为名为"pf.xlsx"的Excel文件。\[1\]\[2\] 如果要将单个sheet写入Excel .xlsx文件,只需指定目标文件名即可。例如: ```python import pandas as pd df1 = pd.DataFrame(\[\['a', 'b'\], \['c', 'd'\]\], index=\['row 1', 'row 2'\], columns=\['col 1', 'col 2'\]) # 将df1写入output.xlsx df1.to_excel("output.xlsx") # 命名一个sheet df1.to_excel("output.xlsx", sheet_name='Sheet_name_1') ``` 这段代码将DataFrame对象df1写入名为"output.xlsx"的Excel文件,并在该文件创建一个名为"Sheet_name_1"的sheet。\[3\] #### 引用[.reference_title] - *1* *3* [python 操作Excel(4) to_excel 保存 excel](https://blog.csdn.net/sinat_41838539/article/details/104683955)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [EXCELPYTHON系列第一篇---Pandas(2)to_excel详解-xlsxwriter及openpylx](https://blog.csdn.net/m0_73209313/article/details/127356551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值