如何不重新写入重复内容而删除一个文件末尾的内容?

2020-04-14 10:11:48 +08:00
 sxw

需求是这样的:

一个很大的文件,例如 5 千万行,每行是一个字符 a 。 想删掉最后一行。

我知道的一个办法是重新写入一次,但是耗时很多。

请问应该怎么操作才能避免重写文件呢?

使用 "w" 或者 "w+" 打开文件好像是直接清空文件?(我尝试使用 w+ 打开,seek 以后啥也不写入,文件被清空)

参考这个方法:如何编辑一个大文件https://www.zhihu.com/question/20654719/answer/605322220 ) ,但是 "r+" 打开可以只修改特定位置而避免重写,但是无法把后面的内容截断。

实验代码( python3 ):

1185 次点击
所在节点    问与答
5 条回复
tabris17
2020-04-14 10:15:52 +08:00
ftruncate
rrfeng
2020-04-14 10:16:18 +08:00
seek()
sxw
2020-04-14 10:18:17 +08:00
@rrfeng 请问 seek 怎么操作呢?用什么方式打开文件?我尝试用 'w+' 和 'w' 打开文件 seek 再关闭,都会清空文件。
sxw
2020-04-14 10:23:49 +08:00
@tabris17 非常感谢,弄好了
sxw
2020-04-14 10:28:01 +08:00
根据 @tabris17 的方法,用 python3 实现是:

```python
import os
f = os.open('test_file', os.O_RDWR|os.O_CREAT)
os.ftruncate(f, os.path.getsize('test_file') - 2)
os.close(f)
```

耗时几毫秒

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/662192

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX