gpt4 book ai didi

python - 覆盖文件的第 n 个字节

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:58 25 4
gpt4 key购买 nike

在 python 中,编辑文件中间部分的正常方法通常包括获取文件的第一部分,添加您想要的内容,然后添加后半部分减去您编辑的字节。我的问题是有没有什么方法可以打开一个文件并只编辑某些字节而不将整个文件加载到内存中,并且还可以从文件中读取字节而不将整个文件加载到内存中。我要编辑的文件将非常大,因此将它们加载到变量中既缓慢又低效

最佳答案

您可以查找然后写入,但是查找和写入通常不是那么直观 - 特别是当您需要修改值时(在 12345678 处的字节加 1);还 writeread 移动指针,或者您需要将字节值实际转换为 bytes([value]) for write等。

如果您有一台 64 位计算机; 64 位操作系统和 64 位 Python——您可以使用所有这些位,并使用 mmap 模块将整个文件内存映射到虚拟内存;使用 mmap,您可以将文件作为类似 bytearray 的对象(Python 3)访问:

with open("big.data", "r+b") as f:
# memory-map the file, size 0 means whole file
mm = mmap.mmap(f.fileno(), 0)
# write byte 42 to position 12345678
mm[12345678] = 42
# add 1 to byte at position 12345679
mm[12345679] += 1
mm.close()

(在 Python 2 上,元素是长度为 1 的 8 位字符串,因此您需要使用 chr(42) 等)


在 32 位计算机上,较小的虚拟内存将可以以这种方式操作的文件的最大大小限制为千兆字节甚至更小;在 64 位计算机上,可以假设您不会有太大而无法映射的文件。

附言mmap is also very nice for reading big data

关于python - 覆盖文件的第 n 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36579505/

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