文本文件读写:打开、读取、写入与关闭
文件读写,说白了就是让程序和硬盘上的文件「对话」。我刚开始学的时候,总觉得这步很神秘——代码怎么就能跑到文件里去了?后来做项目多了才发现,其实核心就四个动作:打开、读取、写入、关闭。今天咱们就把这四件事彻底讲透。
1. open() 函数:打开文件的第一步
要读写文件,第一步永远是打开它。Python 里用 open() 函数干这事。它的基本用法很简单:
file = open('test.txt', 'r') # 'r' 表示只读模式
这里有两个关键参数:文件名和模式。模式决定了你能对文件做什么。我个人习惯把模式记成一张表,用的时候查一下就行:
| 模式 | 含义 | 文件存在时 | 文件不存在时 |
|---|---|---|---|
'r' |
只读 | 正常打开 | 报错 |
'w' |
只写 | 清空内容 | 新建文件 |
'a' |
追加 | 末尾追加 | 新建文件 |
'r+' |
读写 | 正常打开 | 报错 |
'w' 模式时要格外小心。我曾经在项目中不小心用 'w' 打开了一个重要的配置文件,结果文件内容直接被清空了……嗯,那次教训让我养成了「写之前先备份」的习惯。
2. 读取文件:三种方法各有千秋
文件打开后,怎么把内容读出来?Python 给了我们三种选择。
2.1 read():一口气读完
read() 会把整个文件内容当作一个字符串返回。适合小文件:
with open('test.txt', 'r') as f:
content = f.read()
print(content) # 输出整个文件内容
你也可以指定读取的字符数:f.read(100) 表示只读前 100 个字符。这个参数在读取大文件时很有用,可以分块处理。
2.2 readline():一行一行来
readline() 每次只读一行。我建议在需要逐行处理数据时用这个,比如读取日志文件:
with open('log.txt', 'r') as f:
line = f.readline()
while line:
print(line.strip()) # strip() 去掉换行符
line = f.readline()
你想想看,如果日志文件有 10 万行,用 read() 一次性读完,内存可能直接爆掉。而 readline() 每次只处理一行,内存占用几乎可以忽略。
2.3 readlines():全部读成列表
readlines() 会把每一行作为列表的一个元素返回。适合需要随机访问各行的场景:
with open('test.txt', 'r') as f:
lines = f.readlines()
print(lines[0]) # 第一行
print(lines[-1]) # 最后一行
readline() 类似,但代码更简洁:for line in f: print(line)。我个人更推荐这种方式,省心。
3. 写入文件:write() 和 writelines()
写入文件同样有两种方式。记住一点:写入前文件必须用 'w'、'a' 或 'r+' 模式打开。
3.1 write():写入字符串
write() 接受一个字符串参数,把它写入文件:
with open('output.txt', 'w') as f:
f.write('Hello, World!\n')
f.write('这是第二行\n')
注意:write() 不会自动加换行符,你需要手动加 \n。这个细节我踩过坑——有次写配置文件,忘了加换行,结果所有内容挤在一行,解析器直接报错。
3.2 writelines():写入字符串列表
writelines() 接受一个可迭代对象(比如列表),把每个元素写入文件。但它也不会自动加换行符:
lines = ['第一行\n', '第二行\n', '第三行\n']
with open('output.txt', 'w') as f:
f.writelines(lines)
说白了,writelines() 就是批量版的 write()。如果你有一个列表要写入,用它比循环调用 write() 效率更高。
4. 关闭文件:别忘了我
文件用完后一定要关闭。为什么?因为打开的文件会占用系统资源,不关闭可能导致数据丢失或资源泄漏。
传统做法是手动调用 close():
f = open('test.txt', 'r')
# 读写操作...
f.close()
但这样做有个风险:如果读写过程中发生异常,close() 可能永远不会被执行。所以我强烈建议用 with 语句,它会自动帮你关闭文件:
with open('test.txt', 'r') as f:
content = f.read()
# 离开 with 块后,文件自动关闭
with 就别手动 close()。这不仅是习惯问题,更是代码健壮性的保障。
5. 知识体系总览
下面这张图把本章的核心知识点串起来了,你可以用它来快速回顾:
这张图把四个核心步骤和它们的分支方法都列出来了。你可以把它当作一个「速查地图」——写代码时忘了某个方法,看一眼就记起来了。
with open() as f: 这个结构背下来。它就像一把万能钥匙,能打开 90% 的文件读写场景。剩下的 10%?等你遇到特殊需求时,自然就知道怎么查文档了。
好了,文本文件读写的核心内容就这些。记住四个步骤:打开、读取/写入、关闭。多用 with 语句,少踩手动关闭的坑。代码写多了,这些操作就会变成肌肉记忆,想都不用想。
可可精品资料库