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 写入数据
- 三、总结
- 一、文件操作基础
一、文件操作基础
-
文件操作核心概念
在Python中,文件操作通过内置的
open()函数创建文件对象来实现。文件操作的本质是与操作系统进行I/O交互,因此需要特别注意资源的释放和管理。file:被创建的⽂件对象,为文件名或者文件路径的字符串。
参数 说明 示例 filename文件路径(相对路径/绝对路径) data.txt、./data/info.txtmode打开模式,决定读写权限和行为 r、w、aencoding编码格式,文本模式必须指定 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.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(),会导致:文件句柄泄露(操作系统资源被占用)、写入缓冲区数据未刷新(数据丢失)、文件被锁定,其他程序无法访问
-
异常处理
文件操作常见的异常类型:
异常类型 触发条件 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() # 确保在任何情况下都关闭文件 -
大文件处理技巧
当处理大型文件(如日志文件、数据库导出文件)时,绝不能使用
read()一次性读取全部内容,否则可能导致内存溢出。正确做法:利用文件对象的迭代特性逐行读取。
# ✅ 逐行迭代(内存友好) with open('large_file.txt', 'r', encoding='utf-8') as file:for line in file: # file对象本身就是迭代器process_line(line) # 每次只处理一行 -
目录操作(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') # 重命名/移动 -
文件复制与移动
stutil模块提供了高级的文件操作函数。import shutilshutil.copy('source.txt', 'destination.txt') # 复制文件 shutil.move('file.txt', 'new_dir/file.txt') # 移动文件(也可重命名)
二、Excel操作(openpyxl)
-
为什么使用openpyxl?
在数据处理和分析场景中,Excel是最常用的数据存储格式之一。
openpyxl是Python操作.xlsx格式文件最成熟的第三方库,具有以下优势:- 纯Python实现,跨平台
- 支持读写Excel 2010及以上版本的xlsx/xlsm文件
- 功能完善,支持单元格样式、图表、公式等
-
安装与核心对象
pip install openpyxl2.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.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三层对象读写数据。核心就两件事:管好资源、读好数据。