Python:撤消写入文件

asp*_*ade 2 python file undo

撤消写入文件的最佳方法是什么?如果我要经历一个循环并且一次写一行,并且我想撤消之前的写入并用其他东西替换它,我该如何去做呢?有任何想法吗?

提前致谢!

Jav*_*ier 5

正如其他人指出,这并没有太大的意义,它不如不写,直到你不得不这样做.在您的情况下,您可以将"书写指针"保持在处理后面一行.

伪代码:

previousItem = INVALID
for each item I:
  is I same as previousItem?
    then update previousItem with I
    else
      write previousItem to file
      previousItem = I
write previousItem to file
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,previousItem是唯一保留在内存中的项目,并根据需要更新为"累积".只有当下一个与那个"不相同"时才会写入文件.

当然,你可以真正回滚文件光标,只是跟踪最后一行开始的字节偏移,然后fseek()在重写之前做到那里.起初,编码似乎更简单,但这是调试的总噩梦.


Gle*_*ard 5

如前所述,您最好不要尝试撤消写入。不过,如果你真的想这样做,那也很简单:

import os
f = open("test.txt", "w+")
f.write("testing 1\n")
f.write("testing 2\n")
pos = f.tell()
f.write("testing 3\n")

f.seek(pos, os.SEEK_SET)
f.truncate(pos)
f.write("foo\n")
Run Code Online (Sandbox Code Playgroud)

只需记录要倒回的文件位置,向后查找,然后将文件截断到该位置即可。

这样做的主要问题是它不适用于流。您不能对 stdout、管道或 TCP 流执行此操作;仅针对真实文件。