使用python从大型二进制文件中删除一系列字符
作者:互联网
我想从python中的二进制文件中修剪相同值的长序列.一种简单的方法是简单地读取文件并使用re.sub替换不需要的序列.这当然不适用于大型二进制文件.可以用像numpy这样的东西吗?
解决方法:
如果你没有内存来打开(“big.file”).read(),那么numpy就不会真正帮助..它使用与python变量相同的内存(如果你有1GB的RAM,你只能将1GB数据加载到numpy中)
解决方案很简单 – 以块的形式读取文件.. f = open(“big.file”,“rb”),然后执行一系列f.read(500),删除序列并将其写回另一个文件宾语.几乎你如何用C语言进行文件读/写.
那么问题是如果你错过了你要替换的模式..例如:
target_seq = "567"
input_file = "1234567890"
target_seq.read(5) # reads 12345, doesn't contain 567
target_seq.read(5) # reads 67890, doesn't contain 567
显而易见的解决方案是从文件中的第一个字符开始,检查len(target_seq)字符,然后前进一个字符,再次向前检查.
例如(伪代码!):
while cur_data != "":
seek_start = 0
chunk_size = len(target_seq)
input_file.seek(offset = seek_start, whence = 1) #whence=1 means seek from start of file (0 + offset)
cur_data = input_file.read(chunk_size) # reads 123
if target_seq == cur_data:
# Found it!
out_file.write("replacement_string")
else:
# not it, shove it in the new file
out_file.write(cur_data)
seek_start += 1
它不是最有效的方式,但它可以工作,而不需要在内存中保留文件的副本(或两个).
标签:python,numpy,binaryfiles 来源: https://codeday.me/bug/20190726/1548588.html