gpt4 book ai didi

python - 如何在不创建临时文件的情况下从文件 'in-place' 中删除行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:52 25 4
gpt4 key购买 nike

我为我正在编写的程序编写了 3 个单独的测试用例。不幸的是,我这样做填满了我的硬盘驱动器,大约 300+ gbs。我想从每个测试用例文件中提取样本,并删除文件的其余部分。

我知道如何使用“readline”在不消耗内存的情况下就地读取行,所以我可以从每个文件中取出一行并将其放入一个新文件中,然后使文件索引指向下一行而不是第一行行,从而释放存储空间。

这可以使用 python 库吗?

编辑:取出sed,它创建一个临时文件

最佳答案

I'd like to take samples from each test case file, and delete the rest of the file.

从顶部逐行阅读。将要保留的片段写入文件的开头。保留文件中样本结束位置和未读部分开始位置的当前偏移量。

如果复制的片段可能与目标重叠;使用类似于 memmove(fp+current_offset, fp+unread_offset, count) 的算法: “从缓冲区的开头向前复制字节”。复制后:

current_offset += count
unread_offset += count

继续直到获取足够的样本,然后调用 file.truncate(current_offset) 删除文件中样本之后的所有内容。

例如,如果你想随机保留一半的行:

#!/usr/bin/env python
import random

with open('big-big.file', 'r+b') as file:
current_offset = file.tell()
while True:
line = file.readline() # b'\n'-separated lines
if not line: # EOF
break
if random.random() < 0.5: # keep the line
unread_offset = file.tell()
file.seek(current_offset)
file.write(line)
current_offset = file.tell()
file.seek(unread_offset)
file.truncate(current_offset)

关于python - 如何在不创建临时文件的情况下从文件 'in-place' 中删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com