保存到文本文件但只保存更改

1 投票
3 回答
1180 浏览
提问于 2025-04-18 14:09

我已经成功把我需要的所有内容写入文本文件了,但实际上程序需要不断回到这个文本文件里,只保存更改的部分。现在它每次都把整个文件覆盖掉,之前的信息都被删掉了。

3 个回答

0

你所做的这些改动是要在程序的多次运行中进行吗?如果不是的话,我建议你在数据还在内存里的时候就把所有的改动都做好,然后在程序快结束的时候再把这些数据写出去。

0

你可以这样打开它:

FileOpen = open("test.txt","a")
2

关于文本文件是怎么组织的,大家常常会有些困惑。

文本文件不是按行组织的,而是按字节组织的

当我们查看一个文本文件时,它看起来是由多行组成的。

我们自然会想,文件在磁盘上的存储也是这样,但其实并不是这样。

文本文件是一个字节一个字节地写入磁盘的,通常一个字符用一个字节表示(但有时候可能会用多个字节)。一行文本实际上就是一串字节,最后会用某种换行符(比如"\n"、"\n\r"等)来结束。

如果我们想修改三行中的第二行,我们必须在第二行的字节中进行修改,不能影响到第三行。如果我们写入的字节太多,就会覆盖到第三行的字节。如果写得太少,第二行的剩余部分就会留下过时的字节。

修改文本文件内容的策略

重新发布者 - 先读取,修改后再全部写回

这听起来可能需要花费很多精力,但实际上这是最常用的方法,99%的情况下都是最有效的。

这个方法的好处在于,它很简单。

事实上,对于大多数文件来说,这种方法的速度是足够快的。

日志 - 在文件末尾追加更改

比较少见的方法是,先将文件的初始版本写入磁盘,然后在后面追加关于更改的记录。

读取这样的文件时,需要重新运行所有的更改历史,从日志中找出文件的最终内容。

外科医生 - 只修改受影响的行

如果你保持每行的字节长度固定(注意是按字节,而不是按字符来计算!),你可以直接定位到需要修改的行,只重写那一行。

不过,这样做比较复杂,通常用于二进制文件。这绝对不是初学者能轻松完成的任务。

结论

推荐使用“重新发布者”的模式。

使用适合你需求的格式(INI、CSV、JSON、XML、YAML等)。

个人来说,我更喜欢将数据保存为JSON格式 - json包是Python标准库的一部分,它支持列表和字典,可以保存表格和树状结构的数据。

撰写回答