Hello 各位小伙伴,我是小黄~
日常写 Python 代码时,你是不是也常遇到这些困扰:想读取本地文本却频频报错、写入内容不小心覆盖原有数据、找不到文件路径无从下手、处理大文件时程序直接卡死……其实 Python 文件操作压根没那么复杂,核心就几个关键方法,吃透就能应对90%的实战场景。
今天这篇文章,我就从纯新手视角出发,用大白话+可直接复制的实战案例,把文件操作的核心知识点——读/写、路径处理、异常捕获、大文件处理,一次性讲透,没有晦涩难懂的概念,全是能直接上手的干货,帮你彻底搞定文件操作难题。
学文件操作前,大家先记住一个核心流程:打开文件 → 操作文件(读/写) → 关闭文件。这三步是所有文件操作的根基,少一步都可能出现异常,新手一定要牢记于心。
Python 中打开文件的核心函数是 open(),新手无需死记所有参数,先掌握3个核心参数,就足够应对日常绝大多数场景:
# 基础语法:open(文件路径, 打开模式, 编码格式)
file = open("test.txt", "r", encoding="utf-8")
文件路径:分为相对路径(如 "test.txt",与代码文件在同一目录,新手首选)和绝对路径(如 "D:/python/test.txt",精准定位文件位置);
打开模式:最常用3种——r(只读,无法写入)、w(写入,会覆盖原有内容)、a(追加,在文件末尾添加内容);
编码格式:固定用 utf-8 即可,能有效避免中文乱码(新手最高频的坑,没有之一!)。
打开文件后,操作完成必须用 close() 手动关闭,否则会持续占用系统资源,严重时还会导致文件损坏、内容丢失,大家可以参考下面的示例代码:
file = open("test.txt", "r", encoding="utf-8")
# 这里写具体的文件操作逻辑
file.close() # 关闭文件,必不可少!
不过新手很容易忘记写 close(),这里给大家推荐一个更简洁、更安全的方式——with 语句。它会自动关闭文件,无需手动添加 close(),能彻底规避遗忘风险,新手优先选用:
# with 语句自动关闭文件,新手优先选用这种方式
with open("test.txt", "r", encoding="utf-8") as f:
# 在这里执行具体的文件操作
content = f.read() # 读取文件内容
print(content) # 退出with代码块后,文件已自动关闭,无需手动操作
掌握了文件操作的核心流程后,咱们重点学习最核心的「读」和「写」操作。建议大家先扎实掌握这两种基础操作,再学后续的进阶技巧,循序渐进更易上手。
读取文件有4种常用方法,分别对应不同的使用场景,我用表格给大家对比清楚,新手可以快速找到适合自己的方式:
read() | f.read() | |
readline() | f.readline() | |
readlines() | f.readlines() | |
for line in f: |
# 1. 读取整个文件(适合小文件,快速获取全部内容)
with open("test.txt", "r", encoding="utf-8") as f:
content = f.read()
print("读取整个文件:\n", content)
# 2. 逐行读取(适合查看部分内容,比如前几行)
with open("test.txt", "r", encoding="utf-8") as f:
line1 = f.readline() # 读取第一行
line2 = f.readline() # 读取第二行
print("逐行读取:\n", line1, line2)
# 3. 读取所有行(返回列表,方便后续遍历处理)
with open("test.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print("读取所有行(列表):\n", lines) # 每一行对应列表的一个元素,包含换行符
# 4. 遍历文件对象(大文件首选,内存占用极低)
with open("test.txt", "r", encoding="utf-8") as f:
print("遍历文件对象:")
for line in f:
print(line.strip()) # strip() 去掉每行末尾的换行符,排版更整洁
❌ 新手避坑:读取包含中文的文件时,若不指定 encoding="utf-8",中文内容大概率会出现乱码,这是最常见的低级错误,大家一定要刻在心里!
说完了读取操作,再来看写入操作。写入文件的核心是选对「打开模式」,新手最容易混淆 w 和 a 模式,一不小心就会覆盖原有数据、造成丢失,咱们先明确3种常用模式的核心区别:
w 模式:写入内容,会彻底覆盖文件原有所有数据(非必要慎用,避免误操作!);
a 模式:追加内容,在文件末尾添加新内容,不会影响原有数据(日常追加、修改首选);
w+ 模式:可读可写,同样会覆盖原有数据(功能复杂,新手尽量少用)。
# 1. w模式:写入文件(覆盖原有内容,慎用!)
with open("test.txt", "w", encoding="utf-8") as f:
f.write("Python 文件操作\n") # 写入单行内容,换行符\n实现换行
f.write("新手也能轻松掌握\n") # 继续写入第二行
# 2. a模式:追加内容(不覆盖原有数据,推荐日常使用)
with open("test.txt", "a", encoding="utf-8") as f:
f.write("这是追加的内容\n") # 内容会自动加在文件末尾,不影响原有内容
# 3. 写入多行:用writelines(),适合批量写入列表数据
lines = ["第一行内容\n", "第二行内容\n", "第三行内容\n"]
with open("test.txt", "w", encoding="utf-8") as f:
f.writelines(lines) # 一次性写入多行列表,注意添加换行符
⚠️ 避坑重点:使用 w 模式前,大家一定要反复确认文件原有内容无需保留!一旦执行写入操作,原有数据会被全部覆盖,且无法恢复,新手务必谨慎使用。
新手写文件操作,除了乱码、数据覆盖的问题,还经常遇到「文件找不到」「权限不足」等报错。学会路径处理和异常捕获这两个技巧,能让你的代码更健壮,避免程序直接崩溃。
手动写文件路径很容易出错,比如Windows系统用 \、Mac/Linux用 /,稍不注意就会报错。推荐大家用 os 模块处理路径,能实现跨系统兼容,彻底告别路径坑:
import os
# 1. 获取当前代码文件所在的目录
current_dir = os.getcwd()
print("当前目录:", current_dir)
# 2. 拼接文件路径(推荐!自动适配不同系统的分隔符)
file_path = os.path.join(current_dir, "test.txt")
print("文件完整路径:", file_path)
# 3. 判断文件是否存在(避免因文件不存在报错)
if os.path.exists(file_path):
print("文件存在,可正常操作")
else:
print("文件不存在,无法操作,请检查路径是否正确")
# 4. 判断是否是文件(避免误将文件夹当作文件操作)
if os.path.isfile(file_path):
print("这是一个文件,可以进行读/写操作")
文件操作中可能出现多种异常,比如文件不存在、权限不足、编码错误等。用 try-except 捕获异常,能让程序遇到错误时正常提示,而不是直接崩溃,大幅提升代码的实用性:
file_path = "test.txt"
try:
# 尝试执行文件读取操作
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
print(content)
except FileNotFoundError:
# 捕获「文件不存在」异常
print(f"错误:找不到文件 {file_path},请检查路径是否正确")
except PermissionError:
# 捕获「权限不足」异常
print(f"错误:没有权限访问文件 {file_path}")
except UnicodeDecodeError:
# 捕获「编码错误」异常
print("错误:文件编码格式不正确,建议检查是否为utf-8编码")
except Exception as e:
# 捕获所有未预料到的异常,避免程序崩溃
print(f"其他错误:{e}")
掌握了基础的读/写操作、路径处理和异常捕获后,咱们再学习两个实战高频技巧,轻松应对大文件、批量文件等复杂场景,帮大家提升办公和开发效率。
如果需要处理几百MB甚至GB级的大文件,千万别用 read() 一次性读取——这种方式会瞬间占满内存,导致程序卡死。用「逐行遍历」的方式最稳妥,内存占用极低:
# 处理大文件:逐行读取,边读边处理,不占用大量内存
with open("big_file.txt", "r", encoding="utf-8") as f:
for line in f:
# 这里写具体的处理逻辑(如筛选内容、统计数据等)
if"Python"in line: # 筛选出包含「Python」的行
print(line.strip())
实战中,大家经常需要批量处理文件夹内的文件,比如批量读取所有txt文件、批量修改文件内容。下面这段代码可以快速实现,高效又便捷,大家可以直接参考使用:
import os
# 目标文件夹路径(可根据自己的需求修改)
folder_path = "./files"
# 遍历目标文件夹里的所有文件
for file_name in os.listdir(folder_path):
# 只处理后缀为.txt的文件(可根据需求修改后缀)
if file_name.endswith(".txt"):
# 拼接每个文件的完整路径,避免路径报错
file_path = os.path.join(folder_path, file_name)
# 批量读取文件内容
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
# 批量在文件末尾追加内容
with open(file_path, "a", encoding="utf-8") as f:
f.write(f"\n【批量添加的内容:处理于{os.path.basename(file_path)}】")
print(f"已成功处理文件:{file_name}")
结合我当年学习时踩过的各种坑,我整理了5个新手高频避坑点,帮大家少走弯路、高效掌握文件操作,建议新手收藏牢记:
编码问题:读取/写入中文文件时,务必指定 encoding="utf-8",这是避免中文乱码的关键;
路径问题:优先用 os.path.join() 拼接路径,不要手动写 \ 或 /,适配所有系统;
关闭文件:新手优先用 with 语句,自动关闭文件,彻底避免忘记 close() 的问题;
写入覆盖:非必要不使用 w 模式,日常追加、修改内容,改用a 模式,防止数据丢失;
大文件处理:处理大文件时,绝对不要用 read() 一次性读取,逐行遍历是最省内存、最稳妥的方式。
最后想和大家说一句:Python 文件操作的核心,从来不是死记硬背多少种方法,而是「按需选用」。小文件直接读、大文件逐行读、写入时选对模式、操作前先判断路径、遇到错误及时捕获,这就是文件操作的精髓。
新手不用急于掌握所有技巧,先吃透 open()+with 语句、读/写基础操作、异常捕获这3个核心,再结合实战案例多练几遍,就能应对日常工作中90%的文件操作场景。
#Python文件操作 #Python基础 #文件读写 #路径处理 #异常捕获 #Python实战 #0基础学Python