我有一个应用程序,它从文件中读取行,并在读取时在每行上运行它的魔力。一旦该行被读取并正确处理,我想从文件中删除该行。已保留已删除行的备份。我想做一些像
file = open('myfile.txt', 'rw+')
for line in file:
processLine(line)
file.truncate(line)
这似乎是一个简单的问题,但我想做的是正确的,而不是一大堆复杂的seek()和tell()调用。
也许我真正想做的就是从文件中删除一行。
在这个问题上花了很长时间之后,我决定每个人都可能是对的,这不是一个好的做事方法。这似乎是一个很好的解决方案。我想要的是一个类似于FIFO的东西,它可以让我从文件中弹出行。
您不能。在当前的文件系统上,实际的文本文件实现是不可能的。
文本文件是连续的,因为文本文件中的行可以是任意长度的。 删除某一行意味着从那一点开始重写整个文件。
假设你有一个文件有以下三行
要删除第二行,必须移动磁盘中第三行和第四行的位置。唯一的方法是将第三行和第四行存储在某个地方,截断第二行上的文件,然后重写丢失的行。
如果知道文本文件中每一行的大小,可以使用
.truncate(line_size * line_number)
在任何位置截断文件,但即使这样,也必须重写行后的所有内容。最好在文件中保留一个索引,这样就可以从上次停止的地方开始,而不会破坏文件的一部分。像这样的方法会奏效:
完成后删除所有行:
单独移除每条线:
只能保留导致异常的行:
一般来说,正如其他人已经说过的,你想做什么是个坏主意。
相关问题 更多 >
编程相关推荐