我的程序正在为用户保留一个日志.如果日志变得大于设定的数量,我想删除前20%的行.
从类似的问题来看,我已经看到了在旧文件中读取的建议,并写出了我想要保存到新文件中的所有行.但是,我的文件可能太大而无法继续读取它们,并且使用该方法不会让我保留相同的文件名.
我可以在不读取旧文件的情况下删除文件中的行吗?
为日志文件实现此目的的一般方法是"轮换" - 当日志文件变旧或达到一定大小时,您重命名它并开始编写新文件.如果您正在使用日志记录模块,甚至还有一个预先配置的日志 - RotatingFileHandler会自动执行此操作.
至于你的问题:你只能从后面而不是从头开始截断.一个近似的解决方案是搜索()到文件的20%,首先找到'\n'并将其复制出来 - 但它会很慢并且容易出现竞争条件.使用日志记录和RotatingFileHandler.