编程语言
首页 > 编程语言> > 使用python从大型二进制文件中删除一系列字符

使用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