【问题标题】:Appending specific lines in a file [duplicate]在文件中附加特定行[重复]
【发布时间】:2018-11-06 20:53:15
【问题描述】:

如何编辑文件的特定行?

例子

    What's your name?
    What do you do?
    What's your favourite colour?

然后在运行特定程序后,结果会是..

    What's your name? : Thatile
    What do you do? : I am a student
    What's your favourite colour? : Black

使用 file.seek() 覆盖,我想将原始文本保留在文件中,只需编辑行

【问题讨论】:

  • 你是如何使用 seek 的?我看不出它与附加到一行有什么关系。
  • 我看到了,但没有多大帮助。

标签: python python-3.x


【解决方案1】:

一个简单的解决方案(虽然不是内存效率)是将整个文件读入内存(在循环中使用file.read()file.readline()),编辑您获得的数据以附加答案,然后将修改后的数据写入原始文件(覆盖其原始内容)。

同样,这不是内存效率高,并且在大文件上可能需要很长时间。

【讨论】:

    【解决方案2】:

    简短的回答:您不能“编辑文件中的特定行”,您必须读取整个文件并用编辑的内容覆盖它。安全且节省内存的方法是

    1. 打开一个临时文件进行写入
    2. 打开原文件进行阅读
    3. 循环遍历原始文件的内容,对于每一行,使用新内容更新该行并将其写入临时文件
    4. 关闭所有文件并用临时文件替换原始文件

    【讨论】:

    • write 被调用时,Python 是写入磁盘文件,还是仅在调用close 时才写入磁盘文件?如果是后者(我相信是这种情况),它就不会真正提高内存效率......
    • @Aimery 默认情况下 Python 使用操作系统/文件系统缓冲 - 是的,它是内存高效的,因为系统将在达到给定大小时将缓冲区刷新到磁盘(以及关闭时剩余的所有内容)文件)。通过手动重写,您在内存使用和 IO 延迟之间取得更好平衡的机会非常低...
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 2015-02-18
    相关资源
    最近更新 更多