写在前面
回顾一下,前几篇博客我们学习了 Python 的基本语法、数据类型和常用数据结构。 现在,我们已经具备了 Python 编程的基础能力,可以开始学习如何 与外部世界进行数据交互 了。 而 文件操作,就是数据交互的重要桥梁。
在数据分析工作中,数据通常不会直接在程序中生成,而是存储在各种 文件 中,例如 CSV 文件、文本文件、Excel 文件、数据库文件等。 我们需要 从文件中读取数据,才能进行后续的分析和处理。 同样,分析的结果也需要 保存到文件中,以便生成报告、共享数据或进行持久化存储。
Excel 文件操作的局限:手动 vs 自动化
对于 Excel 用户来说,文件操作可能并不陌生。 我们每天都在打开、编辑、保存 Excel 文件。 但 Excel 的文件操作主要依赖 手动操作 和 图形界面,当需要处理 大量文件 或进行 自动化数据处理 时,Excel 就显得力不从心了:
- 批量文件处理效率低下: 如果要处理成百上千个 Excel 文件,手动一个个打开、复制粘贴,效率极其低下,而且容易出错。
- 自动化流程难以实现: 虽然 Excel VBA 可以实现一定程度的自动化,但学习成本高,代码复杂,维护困难,难以构建稳定可靠的自动化数据处理流程。
- 与其他工具集成性差: Excel 文件操作与其他编程语言和数据分析工具的集成性较差,不利于构建更复杂的数据分析系统。
Python 文件操作:高效、自动化、灵活的数据交互
Python 提供了强大的文件操作功能,可以 高效、自动化、灵活 地处理各种文件,尤其在数据分析领域,Python 的文件操作能力更是不可或缺:
- 代码简洁高效,批量处理文件轻松自如: 使用 Python 代码,几行代码就能实现批量读取、写入、处理多个文件,效率远超手动 Excel 操作。
- 自动化流程轻松构建: Python 脚本可以方便地实现数据导入、处理、分析、导出的自动化流程,解放重复劳动,提高工作效率。
- 与数据分析库无缝集成: Python 的 Pandas 等数据分析库可以与文件操作无缝集成,例如直接从 CSV 文件读取数据到 DataFrame,将 DataFrame 数据写入 CSV 文件,数据处理流程更加流畅高效。
🔑 一、文本文件操作:读写纯文本数据
文本文件 是最常见的文件类型之一,它存储的是 纯文本数据,例如 .txt
文件、.log
文件、.ini
配置文件等。 文本文件可以使用任何文本编辑器 (例如记事本、Sublime Text、VS Code 等) 打开和编辑。
1. 打开文件:open()
函数
要操作文件,首先需要 打开文件。 Python 使用内置的 open()
函数来打开文件,并返回一个 文件对象,通过文件对象可以进行后续的读写操作。
open()
函数的基本语法如下:
file_object = open(file_path, mode='r', encoding=None)
参数说明:
-
file_path
(必需): 要打开的 文件路径 (字符串)。 可以是相对路径或绝对路径。- 相对路径: 相对于当前工作目录的路径。 例如,
"data.txt"
表示当前目录下的data.txt
文件,"data/input.txt"
表示当前目录下的data
文件夹下的input.txt
文件。 - 绝对路径: 从文件系统根目录开始的完整路径。 例如,
"C:/Users/YourName/Documents/data.txt"
(Windows 系统),"/Users/YourName/Documents/data.txt"
(macOS/Linux 系统)。
- 相对路径: 相对于当前工作目录的路径。 例如,
-
mode
(可选,默认为'r'
): 文件打开模式 (字符串),指定文件的打开方式,例如读取、写入、追加等。 常用的模式包括:模式 描述 'r'
读取 (Read):默认模式,只读方式打开文件,文件不存在会报错。 'w'
写入 (Write):写入方式打开文件,文件存在会 覆盖 原内容,文件不存在会创建新文件。 'a'
追加 (Append):追加方式打开文件,文件存在会在 末尾追加 内容,文件不存在会创建新文件。 'r+'
读写 (Read and Write):读写方式打开文件,文件不存在会报错。 'w+'
读写 (Write and Read):读写方式打开文件,文件存在会 覆盖 原内容,文件不存在会创建新文件。 'a+'
追加读写 (Append and Read):追加读写方式打开文件,文件存在会在 末尾追加 内容,文件不存在会创建新文件。 'b'
二进制模式 (Binary Mode):用于打开二进制文件 (例如图片、视频、音频等),需要与其他模式组合使用,例如 'rb'
(二进制读取),'wb'
(二进制写入)。't'
文本模式 (Text Mode):默认模式,用于打开文本文件,可以省略 't'
。 -
encoding
(可选,默认为None
,通常建议设置为'utf-8'
): 文件编码格式 (字符串),指定文件的字符编码方式。 常用的编码格式包括'utf-8'
、'gbk'
、'ascii'
等。 强烈建议在打开文本文件时指定encoding='utf-8'
,以避免中文乱码问题。UTF-8
是一种通用的字符编码,可以表示世界上大多数语言的字符。
示例:以只读模式打开文本文件
try:
file = open("my_file.txt", mode='r', encoding='utf-8') # 以只读模式打开 UTF-8 编码的 my_file.txt 文件
# 文件操作代码将在后续步骤中添加
except FileNotFoundError:
print("文件未找到,请检查文件路径是否正确。")
⚠️ 重要: 文件操作完成后,务必关闭文件! 打开文件会占用系统资源,如果不及时关闭,可能会导致资源泄漏,甚至数据丢失。 可以使用 file.close()
方法手动关闭文件,或者使用 with open(...) as file:
语句 自动管理文件关闭 (推荐使用 with
语句,更安全方便,后面会详细介绍)。
2. 读取文本文件内容
打开文件后,可以使用文件对象的 读取方法 读取文件内容。 常用的读取方法包括:
-
read(size=-1)
: 读取整个文件的内容,并返回一个 字符串。 如果指定了size
参数 (正整数),则最多读取size
个字符。 如果文件很大,一次性读取全部内容可能会占用大量内存,不适合读取超大文件。try: file = open("my_file.txt", mode='r', encoding='utf-8') content = file.read() # 读取整个文件内容 print(content) except FileNotFoundError: print("文件未找到。") finally: if 'file' in locals() and file: # 确保 file 变量存在且已赋值,再关闭文件 file.close()
-
readline(size=-1)
: 读取文件的一行内容 (包括行尾的换行符\n
),并返回一个 字符串。 如果指定了size
参数 (正整数),则最多读取size
个字符或读取到行尾。 如果文件指针已到达文件末尾,则返回空字符串''
。