文本文件读写:打开、读取、写入与关闭

文件读写,说白了就是让程序和硬盘上的文件「对话」。我刚开始学的时候,总觉得这步很神秘——代码怎么就能跑到文件里去了?后来做项目多了才发现,其实核心就四个动作:打开、读取、写入、关闭。今天咱们就把这四件事彻底讲透。

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]) # 最后一行
小技巧: 其实 Python 还支持直接遍历文件对象,效果和 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. 知识体系总览

下面这张图把本章的核心知识点串起来了,你可以用它来快速回顾:

文件读写 open() 打开 读取文件 写入文件 关闭文件 read() readline() readlines() write() writelines() close() with 语句

这张图把四个核心步骤和它们的分支方法都列出来了。你可以把它当作一个「速查地图」——写代码时忘了某个方法,看一眼就记起来了。

我的建议: 刚开始练习时,把 with open() as f: 这个结构背下来。它就像一把万能钥匙,能打开 90% 的文件读写场景。剩下的 10%?等你遇到特殊需求时,自然就知道怎么查文档了。

好了,文本文件读写的核心内容就这些。记住四个步骤:打开、读取/写入、关闭。多用 with 语句,少踩手动关闭的坑。代码写多了,这些操作就会变成肌肉记忆,想都不用想。

可可精品资料库