说真的,刚开始玩 Python 那会儿,碰上 txt 文件,我简直是一脸懵。数据都在里头呢,怎么让我的代码兄弟把它“看”懂、把里面的东西“拽”出来啊?或者反过来,我辛辛苦苦算出来的结果,怎么给它整整齐齐地“塞”进一个 txt 里存好?这 文件操作,看着简单,里头弯弯绕还真不少。最基础的,就是这个打开文件的动作。

你肯定听说过 open() 这个函数吧?没错,这就是 Python打开文件的“钥匙”。语法嘛,基础款是这样的:open(文件名, 模式)。就这么仨瓜俩枣?看起来简单,但别急,坑就在细节里。

最常用的模式是什么?读取文件,那就是 'r' (read);想往文件里写东西,用 'w' (write);要是怕把原来的内容冲掉,想在文件末尾接着写,那就 'a' (append)。还有些别的模式,比如 'b' (binary) 处理非文本文件,'+' (update) 能读也能写,但咱们今天主要聚焦 txt,就先盯着 'r', 'w', 'a' 说。

比如,我想打开一个叫 my_data.txt 的文件,只是为了读里面的内容,我就这么写:

“`python
f = open(‘my_data.txt’, ‘r’)

接下来就可以从 f 里读数据了…

“`

看着没啥问题对吧?但这里有个超大的陷阱!文件打开了,就像你开了一扇门,用完了得关上啊!不然系统资源占着不说,有时候你写进去的东西可能还没真正存盘,程序出个岔子,数据就丢了。所以,打开文件后,用完了切记要关闭!就像这样:

“`python
f = open(‘my_data.txt’, ‘r’)

读文件操作…

f.close() # 千万别忘了这一步!
“`

但是!你有没有觉得这样写很麻烦?而且要是中间读文件的时候出错了,比如文件不存在,或者权限不对,程序崩了,f.close() 那句代码根本就执行不到,文件就一直开着,成了一个悬而未决的“幽灵连接”。贼烦!

所以,有没有更好的办法?当然有!Python 大神们早就想到了,这就是我强烈推荐、也是最最标准的打开文件姿势:使用 with open(...) 语句块!

“`python
with open(‘my_data.txt’, ‘r’) as f:
# 在这个缩进块里操作文件 f
# 读写代码放这里…

代码执行到 with 块外面时,文件 f 会自动关闭,

不管中间有没有出错!省心又安全!

“`

看到没?with open(...) as f:,这简直是 Python 文件操作的黄金法则!它就像给你一个限时卡,在这个 with 划定的地盘里,你可以随便“折腾”这个文件对象 f,一旦你出了这个地盘(with 块的缩进结束),Python 会自动帮你把文件关得死死的。太贴心了有没有!再也不用担心忘记 f.close() 了,也不用怕程序异常导致文件泄露。以后 Python 怎么打开 txt 文件,脑子里第一反应就应该是 with open(...)

好了,门是打开了,那怎么把里面的东西拿出来?

如果你想一次性把整个文件的内容都读出来,用 f.read() 就行:

python
with open('my_data.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)

注意了!这里我偷偷加了个参数:encoding='utf-8'。这个参数巨重要!尤其是在处理包含中文的文件时。不同的操作系统、不同的编辑器保存 txt 文件时,可能会用不同的编码方式(比如 GBK, UTF-8)。如果打开时指定的编码和文件实际编码不一致,读出来的内容就会变成一堆乱码,就是那种看了头皮发麻的“锟斤拷”或者方框。我刚学的时候就因为这个摔过大跟头,明明文件里写的是中文,读出来鬼知道是什么!所以,养成好习惯,打开 txt 文件时,尽量加上 encoding='utf-8'utf-8 是国际通用的编码,兼容性最好。当然,如果确定是其他编码,就改成对应的,比如 encoding='gbk'

接着说读取。如果文件很大,一次性 read() 到内存可能会撑爆。这时候,通常我们会选择一行一行地读。Python 里有几种方法:

  1. f.readline():每次读一行。重复调用,直到读完。读到文件末尾就返回空字符串 ''
    python
    with open('my_data.txt', 'r', encoding='utf-8') as f:
    line1 = f.readline()
    line2 = f.readline()
    # ... 这样一行一行读
  2. f.readlines():把文件的所有行都读出来,放在一个列表中,列表的每个元素就是文件里的一行(包含换行符 \n)。
    python
    with open('my_data.txt', 'r', encoding='utf-8') as f:
    all_lines = f.readlines()
    # now all_lines is a list like ['第一行\n', '第二行\n', ...]
  3. 直接遍历文件对象 f:这是最优雅、最省内存的方式!Python 的文件对象本身就是一个迭代器,可以直接用 for 循环遍历,每次循环得到的就是文件的一行。
    python
    with open('my_data.txt', 'r', encoding='utf-8') as f:
    for line in f:
    # line 就是文件的一行,包含了换行符
    print(line.strip()) # strip() 可以用来去掉行末的换行符和空白符

    我个人最喜欢第三种方法,简洁高效,尤其处理大文件时,它不会一次性把所有内容加载到内存,而是读一行处理一行,内存占用小得多。

好了,读取讲完了,那往文件里写入呢?
前面说了,写入模式用 'w''a'
'w' 模式:打开文件,如果文件存在,会清空原有内容再写;如果文件不存在,就新建一个。危险操作! 用之前三思!
'a' 模式:打开文件,如果文件存在,会在文件末尾追加内容;如果文件不存在,就新建一个。通常比 'w' 安全。

写入的函数主要是 f.write(字符串)。注意,write() 函数只接受字符串作为参数。如果你想写数字或其他类型的数据,得先转换成字符串。

“`python

使用 ‘w’ 模式写入 (会覆盖原文件内容)

with open(‘output.txt’, ‘w’, encoding=’utf-8′) as f:
f.write(‘这是要写入的第一行。\n’)
f.write(‘这是第二行。\n’)
f.write(str(123) + ‘\n’) # 数字要先转成字符串

使用 ‘a’ 模式追加写入

with open(‘output.txt’, ‘a’, encoding=’utf-8′) as f:
f.write(‘这是追加的新内容。\n’)
f.write(‘又追加一行。\n’)
“`

如果你有很多行内容(比如在一个列表中),想一次性写入文件,可以用 f.writelines(可迭代对象)。注意,writelines() 不会自动给你加换行符,所以如果列表里的每行末尾没有 \n,写进去的文件就会所有内容挤在一行。通常我们会这样做:

“`python
lines_to_write = [‘第一行\n’, ‘第二行\n’, ‘第三行\n’]
with open(‘bulk_write.txt’, ‘w’, encoding=’utf-8′) as f:
f.writelines(lines_to_write)

或者如果你的列表是这样 [‘第一行’, ‘第二行’, ‘第三行’]

你可以先处理一下再加上换行符

lines_no_newline = [‘第一行’, ‘第二行’, ‘第三行’]
lines_with_newline = [line + ‘\n’ for line in lines_no_newline]
with open(‘bulk_write_processed.txt’, ‘w’, encoding=’utf-8′) as f:
f.writelines(lines_with_newline)
“`

看到这里,你对 python 怎么打开 txt 文件,怎么读,怎么写,是不是心里就有谱多了?核心就是那个 with open(...),然后根据你的需求选择模式 ('r', 'w', 'a') 和读取/写入方法 (read(), readline(), readlines(), write(), writelines()),并且永远别忘了编码 (encoding='utf-8') 这个细节!

文件操作是编程里特别基础又特别常用的技能。学好这个,你就能用 Python 处理各种文本数据,从简单的日志文件到复杂的配置信息,都能轻松拿下。所以啊,多练练手,自己建个 txt 文件,用各种模式打开读读写写,亲手体会一下不同模式的区别,尤其是 'w' 会清空文件这个特点,一定要小心!多踩几个编码的坑,你就彻底记住了。

总而言之,python 怎么打开 txt 这事儿,有了 with open,加上对模式编码的理解,就没那么玄乎了。勇敢去尝试吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。