又来了,这个问题。“Python怎么存放txt?” 感觉就像每个刚学编程的朋友,在某个深夜,对着漆黑的屏幕必然会发出的灵魂拷问。别笑,我当年也一样,为了把一个爬虫抓下来的列表存进文件,折腾了半宿,最后发现文件是空的,那种感觉,简直想把键盘砸了。

所以,咱们今天不搞那些教科书式的陈词滥调,就聊点实在的,聊聊我是怎么从一个连文件都存不明白的小白,到现在能把TB级日志玩得飞起的。

最直接,也最“危险”的玩法:w 模式

初学者最先接触的,肯定是这个:

“`python

这可能是你写的第一段文件操作代码

text_to_save = “Hello, world. 这是我的第一个文件。”
with open(‘my_first_file.txt’, ‘w’, encoding=’utf-8′) as f:
f.write(text_to_save)
“`

看见没?就这么几行。核心就是那个 open() 函数。我给你翻译一下这行代码的“人话”:

“嘿,操作系统,给我找个叫 my_first_file.txt 的本子。用 'w' (write,写入)的方式打开。哦对了,里面的字儿,你得用 encoding='utf-8' 这个密码本(编码)来记,不然中文就变成一堆鬼画符了。”

这里的 'w' 模式,你得给它画上重点,加三个感叹号!!!它像个无情的推土机。如果 my_first_file.txt 不存在,它会创建一个新的。但如果这个文件 已经存在 了,'w' 模式会毫不犹豫地把它夷为平地,然后把你的新内容写上去。之前里面有啥,金山银山?不好意思,全没了。血的教训啊,朋友们,多少次不小心覆盖了重要数据,就因为这个'w'

还有那个 with 语句,我管它叫“安全带”。你用 with,它就能保证不管代码怎么折腾,哪怕中间出错了,最后都会帮你把文件妥妥地关上(f.close())。你要是头铁,非要自己 f = open(...) 然后在最后 f.close(),我保证,总有一天你会忘了关,然后你的文件可能就损坏了,或者数据没写进去。别问我怎么知道的。

不想当“推土机”?那就用追加模式 'a'

如果你不想每次都从零开始,而是想在文件末尾添点新东西,比如记日志,那 'a' 模式 (append,追加)就是你的好朋友。

“`python
import datetime

每次运行,都在文件末尾加一行

log_message = f”{datetime.datetime.now()}: 用户进行了一次重要操作。\n”
with open(‘app_log.txt’, ‘a’, encoding=’utf-8′) as f:
f.write(log_message)
“`

你看,'a' 模式就温柔多了。它会悄悄地溜到文件屁股后面,把你给它的新内容续上去。如果文件不存在,它也会帮你新建一个。这玩意儿用来写日志、记录数据流,简直是天造地设的一对。'w' 是每天换一本新日记,'a' 是在今天的日记本上继续写。

编码,那个看不见的“恶魔”

刚才提到了 encoding='utf-8',我必须再多说几句。这是新手最容易掉的坑,没有之一。

你不加这个参数,在Windows上,Python可能默认用一个叫gbk的编码去存。然后你把这个文件发给用Mac或者Linux的朋友,他一打开,看到的可能就是“烫烫烫”或者“锟斤拷”。这就是编码不一致造成的“乱码惨案”。

所以,养成一个肌肉记忆:只要是处理文本,尤其是带中文的,open() 函数里永远、必须、一定带上 encoding='utf-8'。这就像出门要穿裤子一样,是基本礼仪,也是自我保护。utf-8 是现在的国际通用标准,是互联网世界的普通话,信它,没错。

不止是字符串,列表、字典也能“塞”进去

好了,存个字符串我们是会了。但现实世界哪有这么简单?我们通常要存的是一堆数据,比如一个列表,一个字典。

你可能会想,直接 f.write(my_list)?天真了。write 只接受字符串。你想把一个列表 ['苹果', '香蕉', '橘子'] 存进去,得先把它变成字符串的样子。

笨办法:循环

python
fruits = ['苹果', '香蕉', '橘子']
with open('fruits.txt', 'w', encoding='utf-8') as f:
for fruit in fruits:
f.write(fruit + '\n') # 加个换行符,不然都挤在一起了

这能用,但如果你想再把这个文件读回来,变回原来的列表,就得自己写代码去一行行读,再去掉换行符。麻烦。

聪明的办法:拥抱 json

Python有个内置的超级神器,叫 json 模块。它可以帮你把Python里的列表、字典这些复杂的数据结构,轻松转换成一种通用的、人能看懂的字符串格式,然后再存进文件。

“`python
import json

my_data = {
‘name’: ‘张三’,
‘age’: 28,
‘skills’: [‘Python’, ‘数据分析’, ‘熬夜’],
‘active’: True
}

存进去

with open(‘user_profile.txt’, ‘w’, encoding=’utf-8′) as f:
json.dump(my_data, f, ensure_ascii=False, indent=4)

读出来

with open(‘user_profile.txt’, ‘r’, encoding=’utf-8′) as f:
loaded_data = json.load(f)

print(loaded_data[‘skills’]) # 输出: [‘Python’, ‘数据分析’, ‘熬夜’]
“`

看到没?用 json.dump() 存,用 json.load() 读。一步到位,数据结构完美保留。ensure_ascii=False 是为了让中文直接显示而不是被转成\uXXXX这种鬼样子,indent=4 是为了让存出来的文件格式好看点,带缩进,方便人眼阅读。这才是处理结构化数据存入txt(其实这时叫.json文件更合适,但本质还是文本)的正确姿势!

路径的“迷宫”与 pathlib 的曙光

最后再唠叨一个事:文件路径。

你写 open('data.txt', 'w'),这个data.txt到底存在哪了?答案是:存在于你当前运行Python脚本的那个目录里。这叫“相对路径”。有时候这会让你发疯,因为你搞不清“当前目录”到底是哪。

更好的方式是使用“绝对路径”,但手写起来又长又臭,还容易因为Windows的 \ 和Mac/Linux的 / 打架。

这时候,现代Python给了我们一把瑞士军刀:pathlib 模块

“`python
from pathlib import Path

获取当前脚本所在的目录

current_dir = Path(file).parent

在该目录下创建一个叫 data 的子目录(如果不存在的话)

data_folder = current_dir / ‘data’
data_folder.mkdir(exist_ok=True)

准备要保存的文件路径

file_path = data_folder / ‘my_precious_data.txt’

现在用这个路径对象去打开文件,绝对不会错

with open(file_path, ‘w’, encoding=’utf-8′) as f:
f.write(“再也不会找不到文件了!”)
“`

pathlib,你可以像拼接积木一样构建路径,它会自动处理不同操作系统的斜杠问题,代码清晰又可靠。别再用老掉牙的os.path了,pathlib才是未来。

你看,从一个简单的“python怎么存放txt”,我们扯到了写入模式、追加模式、编码地狱、json序列化,还有路径的艺术。这些零零碎碎的知识点,才构成了文件操作这个看似简单实则充满陷阱的世界。把这些都嚼烂了,你才算真正跨过了这道坎。

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