🌟 导读欢迎来到 Python 学习的第二十二站。
在前面的二十多节课里,我们写的所有代码和数据,都存在电脑的“内存”里。这意味着只要程序一关,或者电脑一停电,你辛辛苦苦算出来的数据就瞬间灰飞烟灭了。
如果我想把爬虫抓到的数据存进一个 .txt 文本里,或者读取电脑桌面上的一份备忘录,该怎么做呢?今天,我们就来学习 Python 与硬盘打交道的桥梁——文件操作(I/O)。带你轻松搞定文件的打开、读取、写入与关闭!🚀
🚪 1. 开门与关门:基础的 open()
要把大象装冰箱,总共分三步:打开冰箱、把大象塞进去、关上冰箱。Python 操作文件也是完全一样的套路!
要想操作文件,第一步必须用 open() 函数把文件打开,并明确告诉电脑你想干嘛(读还是写?)。
# 1. 打开文件(开门)# "test.txt" 是文件名,"r" 代表 read(只读模式)# encoding="utf-8" 极其重要!防止读取中文时变成乱码!file = open("test.txt", "r", encoding="utf-8")# 2. 读取文件内容(操作数据)content = file.read()print(content)# 3. ⚠️ 极其重要:关闭文件(关门)file.close()
🔑 常见的三种核心模式(Mode):
"r" (Read):只读。 文件必须存在,否则报错。
"w" (Write):覆盖写。 如果文件存在,会无情清空里面所有内容再写!如果不存在,会自动帮你新建一个。
"a" (Append):追加写。 不会清空原内容,而是在文件的最末尾接着往下写(比如写日记、记录运行日志)。
✨ 2. 优雅的自动门:with 语句(⭐强烈推荐)
刚才的代码里,有一句 file.close() 非常致命。 如果你的程序在读取文件的过程中突然报错崩溃了,代码就永远走不到 close() 这一步。这会导致文件一直被后台占用,别人想删都删不掉,甚至会导致数据丢失!
为了解决这个痛点,Python 提供了一个极其优雅的魔法语法:with 语句。 你可以把它理解为一扇**“自动门”:只要你离开了这个缩进范围,无论程序是否报错,它都会100% 自动帮你安全关闭文件**!
# 🌟 以后在公司写代码,请永远使用这种写法!with open("test.txt", "r", encoding="utf-8") as file: # 在这个缩进里面,尽情操作文件 content = file.read() print(content)# 一旦退出了缩进,文件已经被自动 close() 啦!极其安全省心!print("文件已自动关闭。")
📖 3. 花式读取:read 家族三兄弟
当我们以 "r" 模式打开文件后,Python 给我们提供了三种读取内容的方式,应对不同的场景:
① read():一口吞下一次性把文件里所有的文字全部读出来,变成一个超级长的字符串。(适合文件比较小的情况。如果是几个 G 的电影剧本,用它会瞬间把电脑内存撑爆!)
② readline():细水长流每次只读一行内容。读完第一行,光标停在第二行开头,下次调用接着往下读。
withopen("test.txt", "r", encoding="utf-8") asfile: line1 = file.readline() # 读第一行 line2 = file.readline() # 读第二行
③ readlines():切片打包一次性把所有内容全读出来,但是会贴心地把每一行切开,装进一个列表(List)里供你遍历。
withopen("test.txt", "r", encoding="utf-8") asfile: lines_list = file.readlines() print(lines_list) # 输出类似于:['第一行内容\n', '第二行内容\n']
✍️ 4. 挥毫泼墨:write 与 writelines
当我们需要往文件里存数据时,要把模式换成 "w"(覆盖写)或 "a"(追加写)。
① write():写入一段字符串
withopen("diary.txt", "w", encoding="utf-8") asfile: file.write("今天是学习 Python 的第22天!\n") file.write("我学会了文件操作!")
(⚠️ 必踩坑预警:Python 不会自动帮你换行!如果你想换行写,必须手动在文字末尾加上换行符 \n!)
② writelines():写入一个列表如果你手里刚好有一个装满文字的列表,想直接塞进文件里,用它准没错。
sentences = ["第一句话\n", "第二句话\n", "第三句话\n"]with open("story.txt", "a", encoding="utf-8") as file: # 把列表里的内容挨个写进去(依然要注意,列表里的文字自己得带 \n) file.writelines(sentences)
📝 总结时刻
今天我们学会了让数据永久保存在硬盘上的方法:
模式选择:r 读,w 覆盖写,a 追加写。
操作规范: 坚决抛弃手动的 close(),全面拥抱安全优雅的 with open(...) as f:。
读文件:read() 全读,readline() 读一行,readlines() 读成列表。
写文件:write() 写字符串,writelines() 写列表(千万别忘了手动加换行符 \n,以及指定 encoding="utf-8" 防止中文乱码)。
👇 互动时间
来考考你的直觉!假设你的电脑桌面上有一个写满了重要账号密码的记事本 passwords.txt。 今天你一时糊涂,写下了这行代码:
with open("passwords.txt", "w", encoding="utf-8") as file:
file.write("今天天气真好!")
请问,执行完这段代码后,你的 passwords.txt 文件会发生什么极其悲惨的事情?
A. 报错,因为文件里已经有密码内容了,不能写。
B. "今天天气真好!" 会被加在密码列表的最后面。
C. 里面的密码全没了,整个文件只剩下一句 "今天天气真好!"。