点击蓝字
关注我们
【Python小白速通】用with打开文件?说白了就是"给代码配个自动关门的冰箱"!
咱之前唠过各种Python操作,但处理文件时总怕"翻车"——打开文件忘了关,导致文件被锁、内容丢了;手动关文件又怕代码报错,关文件的代码压根没执行!这时候**with语句打开文件**就成了救星,主打一个"自动善后、绝不翻车"~
简单说,用with打开文件就像用带自动关门的冰箱:打开冰箱拿可乐(打开文件读内容),不管你是喝完直接走,还是中途摔了一跤,冰箱门都会自动关上(文件自动关闭);而不用with的话,就像老式冰箱,拿完可乐得手动关门,忘关了冰箱门敞一夜,耗电还坏东西(文件出问题)!
一、先唠透:啥是with打开文件?(纯人话版)
先掰碎了说,不整专业术语:
- 普通打开文件:用`open()`打开,用完必须手动`close()`,像手动关门的老式冰箱,容易忘关;
- with打开文件:`with open() as 变量名:`,自带"自动关门"buff,代码块执行完不管有没有报错,文件都会自动关闭;
- 核心好处:不用记着关文件、不怕报错导致文件没关、代码更简洁——新手闭眼用,踩坑率直接降为0!
举个栗子:你要整理奶茶店的销量文件,用普通方式打开就像:"打开文件→记销量→手动关文件",万一记到一半接电话忘了关,文件就一直敞着;用with打开就像:"打开文件→记销量→(不管干啥)文件自动关",哪怕记到一半电脑卡了,文件也会乖乖关上,数据一点不丢~
二、实操!3种with打开文件姿势,小白也能秒会
with打开文件的核心格式:`with open(文件路径, 模式) as 变量名:`,咱从最简单的"读文件"开始,代码都标了"人话注释",复制就能跑~
姿势1:最基础的读文件(看内容版)
模式用`'r'`(read,只读),像打开冰箱只拿东西,不往里放,新手先拿捏这个!
python
#准备工作:先在电脑里建一个叫"奶茶销量.txt"的文件,写几行内容:
#珍珠奶茶:20杯
#芋泥奶茶:15杯
#柠檬水:30杯
#用with打开文件读内容(自动关文件,不用写close())
with open("奶茶销量.txt", 'r', encoding='utf-8') as f:
# 一次性读所有内容
content = f.read()
print("📄 奶茶销量文件内容:")
print(content)
#不用写f.close()!with会自动关,哪怕上面代码报错也会关
👉 运行结果:
📄 奶茶销量文件内容:
珍珠奶茶:20杯
芋泥奶茶:15杯
柠檬水:30杯
姿势2:写文件(填内容版)
模式用`'w'`(write,写入),像打开冰箱放新可乐,注意:`'w'`会清空原有内容,新手别乱试!
python
#用with打开文件写内容(自动关文件)
with open("奶茶新品.txt", 'w', encoding='utf-8') as f:
# 写入内容,\n是换行
f.write("葡萄奶茶:18元\n")
f.write("芒果奶茶:22元\n")
f.write("生椰拿铁:25元")
print("✅ 新品价格文件已创建并写入内容!")
#去电脑里看,会多出一个"奶茶新品.txt",内容就是上面写的~
👉 运行结果:
✅ 新品价格文件已创建并写入内容!
姿势3:追加内容(加内容版)
模式用`'a'`(append,追加),像打开冰箱往里面加可乐,不会清空原有内容,超实用!
python
#给"奶茶销量.txt"追加当天销量(不用清空原来的)
with open("奶茶销量.txt", 'a', encoding='utf-8') as f:
# 先换行,再追加内容
f.write("\n今日新增:")
f.write("\n杨枝甘露:18杯")
#再读一遍文件,看追加结果
with open("奶茶销量.txt", 'r', encoding='utf-8') as f:
print("📄 追加后的销量文件:")
print(f.read())
👉 运行结果:
📄 追加后的销量文件:
珍珠奶茶:20杯
芋泥奶茶:15杯
柠檬水:30杯
今日新增:
杨枝甘露:18杯
三、避坑小彩蛋:新手最容易踩的3个坑
1. 别漏encoding='utf-8':打开/写入含中文的文件,不加这个会乱码!比如文件里的"奶茶"变成"��ȹ",就像冰箱里的可乐冻成冰,根本喝不了~
2. 'w'模式别瞎用:用`'w'`打开已有文件,会直接清空所有内容!比如想改销量文件,用`'w'`打开,原来的20杯、15杯全没了,像往装满可乐的冰箱里倒空水,纯纯败家~
3. 文件路径别写错:比如文件在"桌面/奶茶店"文件夹里,只写`"奶茶销量.txt"`会找不到!正确写法:`"桌面/奶茶店/奶茶销量.txt"`(Windows写`"桌面\\奶茶店\\奶茶销量.txt"`),就像找冰箱得先找对房间,找错了啥也拿不到~
四、with vs 普通open(大白话对比)
| 特点 | with open(自动关门冰箱)| 普通open(手动关门冰箱)|
|------|------------------------|------------------------|
| 关闭文件 | 自动关,无需手动操作 | 必须写f.close(),容易忘 |
| 报错处理 | 哪怕报错,文件也会关 | 报错后,close()不执行,文件敞着 |
| 代码简洁度 | 高(少写一行close())| 低(多一步手动关)|
| 新手友好度 | 极高(几乎不踩坑)| 低(容易忘关、忘写)|
五、实用小技巧:按行读大文件
如果文件超大(比如1000行销量数据),一次性读会卡崩!用with按行读,像一口一口喝奶茶,不呛喉~
python
#按行读大文件,不占内存
with open("奶茶销量.txt", 'r', encoding='utf-8') as f:
for line in f:
# 去掉每行末尾的换行符
line = line.strip()
print(f"📝 单行销量:{line}")
👉 运行结果:
📝 单行销量:珍珠奶茶:20杯
📝 单行销量:芋泥奶茶:15杯
📝 单行销量:柠檬水:30杯
📝 单行销量:今日新增:
📝 单行销量:杨枝甘露:18杯
总结
1. Python用`with open(文件路径, 模式, encoding='utf-8') as 变量名:`打开文件,核心优势是自动关闭文件,不怕忘关或报错;
2. 读文件用`'r'`、写文件(清空)用`'w'`、追加内容用`'a'`,含中文必加`encoding='utf-8'`;
3. 新手别用`'w'`瞎改已有文件,大文件优先按行读,避开90%的文件操作坑。

扫码关注我们
知识奇妙世界