python:openpyxl包

370 阅读1分钟

前言

对于有些已经存在的Excel表,我们只需要添加新的数据即可,不需要overwrite覆盖写入.那么可以利用openpyxl包实现这种需求。

安装openpyxl

pip install openpyxl

demo

<1>第一种方式


import openpyxl
from openpyxl import load_workbook
import pandas as pd

# 构建一个dataframe对象
df = pd.DataFrame({'A': 1, 'B': 2})

# 打开一个xlsx文件,如果该文件不存在,则创建该文件
file = r"myfile.xlsx"
wb = load_workbook(file)
ws = wb.worksheets[0]   # wb["Sheet1"]
# ws.append只支持参数为列表的数据,所以这里我们进行转换
values_list = df.values.tolist()

for i in range(values_list):
    ws.append(i)
wb.save(file)  # 保存文件
wb.close()     # 关闭文件

<2>第二种方式

与<1>类似,但是我们使用openpyxl.utils.dataframe模块中自带的dataframe_to_rows(函数实现dataframe转list。
import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils import dataframe

file = r"myfile.xlsx"
df = pd.DataFrame({'A': 1, 'B': 2})

wb = load_workbook(file)
ws = wb.worksheets[0]   # wb["Sheet1"]
for row in dataframe.dataframe_to_rows(df ,header=False, index=False):
    ws.append(row)
wb.save(file)
wb.close()
这里主要用到的是openpyxl的worksheet append方法,
因为参数row必须为列表格式,所以我们将dataframe进行了转换。
dataframe.values.tolist(), dataframe.dataframe_to_rows(dataframe, header=False, index=False)这2种方式都能够达到我们想要的目的。

户外题

如果是向.csv文件中追加写入数据的话,直接使用dataframe对象的to_csv()函数即可,
```
df.to_csv(path_or_buf="../data/outputs/aaa.csv",
          mode="a",
          header=False,
          index=False)
mode参数决定是覆盖写入,还是追加写入。'w'是覆盖写入,'a'是追加写入
```

虽然dataframe对象也有to_excel()函数,但是to_excel()函数没有mode参数,所以不能追加写入数据。
所以当你要向xlsx的文件中追加写入数据的时候,用openpyxl包就可以了。