Python文件操作与Excel处理

Python文件操作与Excel处理


目录
  • Python文件操作与Excel处理
    • 一、文件操作基础
      • 文件操作核心概念
      • 文件读写操作
        • 2.1 读取方法
        • 2.2 写入方法
        • 2.3 为什么需要with语句
      • 异常处理
      • 大文件处理技巧
      • 目录操作(os模块)
      • 文件复制与移动
    • 二、Excel操作(openpyxl)
      • 为什么使用openpyxl?
      • 安装与核心对象
        • 2.1 三层对象体系
        • 2.2 读取操作
          • 2.2.1 加载工作簿与获取工作表
          • 2.2.2 读取单元格
          • 2.2.3 批量处理读取方式对比
      • 写入操作
        • 3.1 创建与删除工作表
        • 3.2 写入数据
    • 三、总结

一、文件操作基础

  1. 文件操作核心概念

    在Python中,文件操作通过内置的open()函数创建文件对象来实现。文件操作的本质是与操作系统进行I/O交互,因此需要特别注意资源的释放和管理。

    file:被创建的⽂件对象,为文件名或者文件路径的字符串。

    参数 说明 示例
    filename 文件路径(相对路径/绝对路径) data.txt./data/info.txt
    mode 打开模式,决定读写权限和行为 rwa
    encoding 编码格式,文本模式必须指定 utf-8

    不同的打开模式决定了文件的操作权限和初始状态,选择合适的模式是正确操作文件的第一步。

    模式 含义 文件不存在 原有内容 常用场景
    'r' 只读(默认) ❌ 报错 保留 读取配置文件、日志分析
    'w' 写入 ✅ 创建 🔄 清空后写入 生成新数据、覆盖旧文件
    'a' 追加 ✅ 创建 ➕ 末尾追加 日志记录、持续写入
    'x' 独占创建 ✅ 创建 ⚠️ 存在则报错 防止覆盖已有文件
    'b' 二进制模式 图片、视频、音频文件
    't' 文本模式(默认) 普通文本文件

    组合使用

    open('image.jpg', 'rb')      # 二进制读取(图片)
    open('data.bin', 'wb')       # 二进制写入
    open('log.txt', 'a+')        # 读写追加模式
    

    编码格式说明

    • ascii:仅支持英文字符
    • utf-8:通用编码,支持多语言(推荐
    • latin-1:西欧语言编码
  2. 文件读写操作

    2.1 读取方法
    with open('message.txt', 'r', encoding='utf-8') as file:content = file.read()        # 读取整个文件,返回字符串line = file.readline()       # 读取一行,返回字符串lines = file.readlines()     # 读取所有行,返回列表
    
    2.2 写入方法
    with open('file.txt', 'w', encoding='utf-8') as file:file.write('Hello, World!')  # 写入字符串
    
    2.3 为什么需要with语句

    如果忘记调用close(),会导致:文件句柄泄露(操作系统资源被占用)、写入缓冲区数据未刷新(数据丢失)、文件被锁定,其他程序无法访问

  3. 异常处理

    文件操作常见的异常类型:

    异常类型 触发条件
    FileNotFoundError 文件不存在(常见于只读模式)
    PermissionError 没有访问权限
    UnicodeDecodeError 编码不匹配导致解码失败

    推荐写法:结合with语句进行异常处理

    # 方式一:with在try内部(推荐)
    try:with open('file.txt', 'r', encoding='utf-8') as file:data = file.read()
    except FileNotFoundError:print("文件不存在,请检查路径")
    except PermissionError:print("没有文件访问权限")
    except Exception as e:print(f"其他错误: {e}")# 方式二:传统try-finally方式
    try:file = open('file.txt', 'r')data = file.read()
    except FileNotFoundError:print("文件不存在")
    finally:file.close()  # 确保在任何情况下都关闭文件
    
  4. 大文件处理技巧

    当处理大型文件(如日志文件、数据库导出文件)时,绝不能使用read()一次性读取全部内容,否则可能导致内存溢出。

    正确做法:利用文件对象的迭代特性逐行读取。

    # ✅ 逐行迭代(内存友好)
    with open('large_file.txt', 'r', encoding='utf-8') as file:for line in file:           # file对象本身就是迭代器process_line(line)      # 每次只处理一行
    
  5. 目录操作(os模块)

    import os# 最常用的就这几个
    os.getcwd()              # 当前目录在哪
    os.listdir()             # 目录里有什么
    os.path.exists(path)     # 文件/目录是否存在
    os.path.join('a','b')    # 拼接路径(跨平台安全)
    os.makedirs('a/b/c')     # 创建多层目录
    os.remove('file.txt')    # 删除文件
    os.rename('old','new')   # 重命名/移动
    
  6. 文件复制与移动

    stutil模块提供了高级的文件操作函数。

    import shutilshutil.copy('source.txt', 'destination.txt')   # 复制文件
    shutil.move('file.txt', 'new_dir/file.txt')    # 移动文件(也可重命名)
    

二、Excel操作(openpyxl)

  1. 为什么使用openpyxl?

    在数据处理和分析场景中,Excel是最常用的数据存储格式之一。openpyxl是Python操作.xlsx格式文件最成熟的第三方库,具有以下优势:

    • 纯Python实现,跨平台
    • 支持读写Excel 2010及以上版本的xlsx/xlsm文件
    • 功能完善,支持单元格样式、图表、公式等
  2. 安装与核心对象

    pip install openpyxl
    
    2.1 三层对象体系

    理解openpyxl的面向对象设计是掌握该库的关键:

    [!IMPORTANT]

    Workbook(工作簿)—— 代表整个Excel文件
    └── Worksheet(工作表)—— 代表一个sheet页
    └── Cell(单元格)—— 代表一个格子

    2.2 读取操作
    2.2.1 加载工作簿与获取工作表
    import openpyxl# 加载已有的工作簿
    wb = openpyxl.load_workbook('user.xlsx')# 获取所有工作表名称
    sheets = wb.sheetnames          # ['Sheet1', 'Sheet2', '用户管理']# 获取工作表的三种方式
    sheet1 = wb.active                        # 当前激活的sheet
    sheet2 = wb['用户管理']                    # 通过名称(推荐)
    sheet3 = wb.worksheets[0]                 # 通过索引# 遍历所有工作表
    for sheet in wb:print(sheet.title)
    
    2.2.2 读取单元格
    # 方式1:字典索引方式
    cell = sheet['A1']
    print(cell.value)                         # 输出单元格的值# 方式2:cell()方法(行列索引从1开始)
    cell = sheet.cell(row=1, column=1)
    print(cell.value)# 直接获取值
    value = sheet['A1'].value# 获取单元格属性
    print(f"行:{cell.row}, 列:{cell.column}, 值:{cell.value}")
    
    2.2.3 批量处理读取方式对比
    方式 代码 返回 适应场景
    单单元格 sheet['A1'] Cell对象 精确取值
    整行 sheet[3] 元组 读取一行完整数据
    整列 sheet['B'] 元组 读取一列完整数据
    行切片 sheet[2:4] 元组 读取连续多行
    列切片 sheet['A':'C'] 元组 读取连续多列
    行迭代器 sheet.iter_rows() 生成器 大数据量行遍历(推荐)
    列迭代器 sheet.iter_cols() 生成器 大数据量列遍历(推荐)
    # 获取行列信息
    max_row = sheet.max_row      # 最大行数
    max_col = sheet.max_column   # 最大列数# 循环遍历所有数据(推荐方式)
    for row in sheet.iter_rows():for cell in row:print(cell.value, end='\t')print()# 读取指定范围(从第2行到第5行,第1列到第3列)
    for row in sheet.iter_rows(min_row=2, max_row=5, min_col=1, max_col=3):for cell in row:print(cell.value, end='\t')print()# 按列遍历
    for col in sheet.iter_cols(min_row=2, max_row=5, min_col=1, max_col=2):for cell in col:print(cell.value, end='\t')print()
    
  3. 写入操作

    3.1 创建与删除工作表
    # 创建工作表(默认添加到末尾)
    new_sheet = wb.create_sheet(title='新工作表')# 指定索引位置创建
    wb.create_sheet(index=0, title='第一个Sheet')# 删除工作表
    wb.remove(wb['要删除的Sheet名'])wb.save('user.xlsx')         # 保存修改
    

    注意:新建的工作表在Excel中默认为隐藏状态,如需显示可设置:

    new_sheet.sheet_state = 'visible'
    
    3.2 写入数据

    方法1:直接赋值

    sheet['A1'] = '姓名'
    sheet['B1'] = '年龄'
    sheet.cell(row=2, column=1, value='张三')
    sheet.cell(row=2, column=2, value=20)
    

    方法2:append()批量追加

    data = [['姓名', '年龄', '性别'],['张三', 18, '男'],['李四', 19, '女'],['王五', 20, '男']
    ]for row in data:sheet.append(row)         # 逐行追加,自动定位到下一空行
    

    方法3:range()生成批量数据

    # 创建40行,每行16列数据
    for i in range(1, 41):sheet.append(range(16))
    

三、总结

  • 文件操作(基础):处理文本文件(.txt),是Python编程的基础能力
  • Excel操作(进阶):处理结构化数据(.xlsx),是数据处理的专业工具

文件操作本质是"打开→操作→关闭"的资源管理,with语句自动释放;Excel操作通过Workbook-Worksheet-Cell三层对象读写数据。核心就两件事:管好资源、读好数据。