Python 二进制文件中每2048字节删除64字节
我在这里是一个松散的一端,这似乎是一个如此简单的问题,所以我希望有一个简单的答案 我有一个二进制文件(大约35m),从偏移量1536开始,每2048字节有64字节的填充数据-我只想删除这个填充 第一次出现是1536,然后是364857607872,以此类推 (2112字节-64字节的虚拟数据=2048) 我试过bvi、bbe、hexdump+sed+xxd,但显然我遗漏了一些东西Python 二进制文件中每2048字节删除64字节,python,perl,sed,binaryfiles,xxd,Python,Perl,Sed,Binaryfiles,Xxd,我在这里是一个松散的一端,这似乎是一个如此简单的问题,所以我希望有一个简单的答案 我有一个二进制文件(大约35m),从偏移量1536开始,每2048字节有64字节的填充数据-我只想删除这个填充 第一次出现是1536,然后是364857607872,以此类推 (2112字节-64字节的虚拟数据=2048) 我试过bvi、bbe、hexdump+sed+xxd,但显然我遗漏了一些东西 提前感谢,您没有显示任何代码,因此我想您需要帮助了解算法。其实很简单: 虽然你还没有达到标准的EOF, 从标准输入读
提前感谢,您没有显示任何代码,因此我想您需要帮助了解算法。其实很简单:
binmode(STDIN);
binmode(STDOUT);
while (1) {
my $rv = read(STDIN, my $rec, 2112);
die $! if !defined($rv);
last if !$rv;
substr($rec, 1536, 64, '');
print($rec)
or die $!;
}
如果要使用Perl: 使用
:raw
层打开文件。我们不需要:utf8
或:crlf
翻译
然后,我们可以寻找我们感兴趣的位置,并可以读取几个字节
my $size = -s $filename;
open my $fh, "<:raw", $filename;
for (seek($fh, 1536, 0) ; tell($fh) + 2048 < $size ; seek($fh, 2048 - 64, 1)) {
read $fh, my $buffer, 64;
...;
}
my$size=-s$filename;
打开我的$fh,“随机反对票是怎么回事?文件中的“二进制文件”是什么容器?结果到哪里去了?@devnull我真的看不出这个问题中有什么偏离主题。@M42我真的看不到这个问题中有什么偏离主题。@msw我真的看不到这个问题中有什么偏离主题。太好了,非常感谢!可以用sed完成(如您所料),我只是不确定OP是否要跳过2k delete 64b、跳过2k delete 64b或跳过2k delete 64b skip 1984b delete 64b。。。