Python:读写 excel

news/2024/7/21 4:13:19 标签: python, excel, pandas

欢迎访问我的博客首页。


读写 excel

  • 1. xlrd 和 xlwt
    • 1.1 xlrd 读
    • 1.2 xlwt 写
  • 2. openpyxl
    • 2.1 openpyxl 读
    • 2.2 openpyxl 写
  • 3. pandas
  • 4. 参考

  Python 有三种常用的 excel 处理库 xlrd/xlwt、openpyxl、pandas。xlrd/xlwt 只能处理 xls,下标从 0 开始;openpyxl 只能处理 xlsx,下标从 1 开始;pandas 基于 xlrd/xlwt 和 openpyxl,因此可以处理 xls 和 xlsx,下标从 0 开始。

1. xlrd 和 xlwt


  xlrd 和 xlwt 只能处理 xls 文件而不能处理 xlsx 文件。和它们配合使用的还有 xlutils。

pip install xlrd
pip install xlwt
pip install xlutils

1.1 xlrd 读


  使用 xlrd 只能读取 xls 文件,读取 xlsx 文件会报错。xlrd 从 0 开始标记单元格。

python"># encoding=utf-8
import xlrd

if __name__ == '__main__':
    workbook = xlrd.open_workbook('example.xls')
    sheets = workbook.sheets()
    names = workbook.sheet_names()
    print(names)
    # 1.获取第一个工作表。
    worksheet1 = workbook.sheets()[0]
    # worksheet1 = workbook.sheet_by_index(0)
    # worksheet1 = workbook.sheet_by_name(names[0])
    # 2.逐行读取。
    for row in range(worksheet1.nrows):
        print(worksheet1.row_values(row))
    # 3.逐格读取。
    for row in range(worksheet1.nrows):
        for col in range(worksheet1.row_len(row)):
            print(worksheet1.cell_value(row, col), end=' ')
        print()

1.2 xlwt 写


  使用 xlwt 只能保存 xls 文件,保存 xlsx 文件不会报错但不能打开。下面是 xlwt 创建并编辑 excel 的例子。如果要设置字体和颜色等,请参阅参考文献。

  由于 xlwt 从 0 开始标记单元格,所以使用 cell(r, c) 可以为第 r+1 行第 c+1 列赋值。xlwt 支持不连续赋值:即使有空行或空列,也能为下一行或下一列赋值。

python"># encoding=utf-8
import xlwt

if __name__ == '__main__':
    # 编码方式,是否压缩。
    workbook = xlwt.Workbook(encoding='utf-8', style_compression=0)
    # 添加 sheet1,单元格允许覆盖。
    worksheet1 = workbook.add_sheet('one', cell_overwrite_ok=True)
    worksheet1.write(0, 0, '表一内容1')
    # 添加 sheet2,单元格允许覆盖。
    worksheet2 = workbook.add_sheet('two', cell_overwrite_ok=True)
    worksheet2.write(0, 0, '表二内容1')
    # 保存。
    workbook.save('example.xls')

2. openpyxl


  openpyxl 只能读取 xlsx,保存成 xls 时打开会提示错误,但忽略错误就可以打开。安装 openpyxl 的命令是

pip install openpyxl

2.1 openpyxl 读


  openpyxl 从 1 开始标记单元格,因此不能访问行号或列号为 0 的单元格,否则会报错。

python">import openpyxl

if __name__ == '__main__':
    workbook = openpyxl.load_workbook('example.xlsx')
    names = workbook.sheetnames
    print(names)
    # 1.获取第一个工作表。
    worksheet1 = workbook[names[0]]
    # worksheet1 = workbook.worksheets[0]
    # 2.逐格读取。
    for row in range(worksheet1.max_row):
        for cell in worksheet1[row + 1]:
            print(cell.value, end=' ')
        print()
    # 3.逐格读取,可能读到空值。
    for row in range(worksheet1.max_row):
        for col in range(worksheet1.max_column):
            print(worksheet1.cell(row + 1, col + 1).value, end=' ')
        print()
    # 4.逐格读取。
    for row in worksheet1:
        for cell in row:
            print(cell.value, end=' ')
        print()

2.2 openpyxl 写


  由于 openpyxl 从 1 开始标记单元格,所以使用 cell(r, c) 可以为第 r 行第 c 列赋值。openpyxl 支持不连续赋值。

  需要注意的是,openpyxl 会在默认 Sheet 工作表的基础上增加 create_sheet 指定的工作表,但是我们可以指定新增工作表在所有工作表中的顺序。

python"># encoding=utf-8
import openpyxl

if __name__ == '__main__':
    workbook = openpyxl.Workbook()
    worksheet1 = workbook.create_sheet('one', 0)
    worksheet1.cell(2, 2).value = '表一内容1'
    workbook.save('example.xlsx')

pandas_123">3. pandas


  pandas 功能很强大,它不但可以处理 excel,还可以处理 csv 和 xml。

  pandas 基于 xlrd/xlwt 和 openpyxl 处理 excel,因此需要同时安装 xlrd/xlwt 和 openpyxl。安装 pandas 的命令是

pip install pandas

pandas__133">3.1 pandas


  pandas 从 0 开始标记单元格。

python"># encoding=utf-8
import pandas as pd

if __name__ == '__main__':
    # 1. 直接读取某个 sheet 或默认 sheet。
    worksheet = pd.read_excel('example.xls', header=0, index_col=None, sheet_name='one')
    # 1.1 逐行读取。
    for row in range(worksheet.shape[0]):
        print(worksheet.iloc[row].values)
    # 1.2 逐格读取。
    for row in range(worksheet.shape[0]):
        for col in range(worksheet.shape[1]):
            print(worksheet.iloc[row, col], end=' ')
        print()
    # 2. 读取所有 sheet。
    workbook = pd.ExcelFile('example.xls')
    sheet_names = workbook.sheet_names
    for sheet_name in sheet_names:
        worksheet = workbook.parse(sheet_name, header=None, index_col=None)
        # 逐行读取。
        for row in range(worksheet.shape[0]):
            print(worksheet.iloc[row].values)

pandas__162">3.2 pandas


  pd.DataFrame() 的返回值类似一个二维列表,使用 at 或 loc 为单元格赋值,相当于使用 append 给列表赋值,因此 pandas 不支持不连续赋值。如果有单元格需要为空,可以使用空字符串给它赋值。

python"># encoding=utf-8
import pandas as pd

if __name__ == '__main__':
    # 1.只有一个 sheet。
    dataframe = pd.DataFrame()
    dataframe.at[0, 0] = 0
    dataframe.loc[3, 3] = 111
    dataframe.to_excel('example2.xls', sheet_name='one', header=None, index=None, merge_cells=False)
    # 2.多个 sheet。
    with pd.ExcelWriter('example2.xlsx') as writer:
        dataframe.to_excel(writer, sheet_name='one', header=None, index=None)
        dataframe.to_excel(writer, sheet_name='two', header=None, index=None)

4. 参考


  1. xlwt 字体、颜色、格式设置,CSDN,2022。
  2. openpyxl 写入及对齐方式设置,CSDN,2022。

http://www.niftyadmin.cn/n/893148.html

相关文章

数学之美,判断两个线段相交

实现原理,具体参考zdy0_2004的博客点击打开链接,问题描述:判断线段AB、CD是否相交,等价于判断具体实现代码如下:Point get_vector(Point aa, Point bb) {Point vec { 0 };vec.x bb.x - aa.x;vec.y bb.y - aa.y;retu…

图像处理(一):灰度化及RGB2HSV

图像灰度化,即将图像从RBG三通道彩色图像转换成灰度图像,现有的方法主要有三种: 1、取最大值:即从RBG三个彩色通道中,去亮度的最大值 2、取平均值:即取RBG三个彩色通道亮度的平均值 3、取加权平均值&…

编译安装GCC以使用C++新特性

编译安装GCC以使用C新特性1. 安装依赖2. 下载GCC3. 编译安装4. 多版本GCC选择4.1 指定GCC路径4.2 指定libstdc.so路径1. 安装依赖 sudo apt-get install libgmp10 libgmp-dev sudo apt-get install libmpfr4 sudo apt-get install libmpc-dev sudo apt-get install flex bison…

图像处理(二):直方图均衡化

直方图均衡化处理:通过重新均匀地分布各灰度值来增强图像对比度; 具体实现方法如下: 1、统计直方图数组,用Utable来记录Utable[i]; 2、i从1开始,令Cumu[i] Cumu[i-1] Utable[i]; 3、计算概率Pr…

CMake:pkgConfig.cmake

CMake:pkgConfig.cmake1. pkgConfig.cmake语法1.1 指出安装位置1.2 指出头文件位置1.3 指出库文件2. find_package查找在CMake中,CMakeLists.txt是项目的配置文件。编译时,常需要包含第三方库的头文件和链接库文件。以OpenCV为例,…

图像处理(三):图像滤波

均值滤波:利用点(x,y)领域内像素点均值来替换(x,y)处像素值; 中值滤波:利用点(x,y)领域内像素点中值来替换(x,…

C++:读写csv文件

C&#xff1a;读写csv文件#include <iostream> #include <fstream>using namespace std;int main() {ofstream outFile;outFile.open("../data.csv", ios::ate);for(int i0; i<5; i) {outFile << i << , << "name" <…

C++:多线程std::thread

C&#xff1a;多线程std::thread1. 线程的创建和终止2. 线程的参数传递3.线程和进程的身份标识1. 线程的创建和终止 在main函数中&#xff0c;创建线程并控制线程结束&#xff1a; #include <iostream> #include <thread> #include <unistd.h> using namesp…