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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值