Python 二进制文件中每2048字节删除64字节

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, 从标准输入读

我在这里是一个松散的一端,这似乎是一个如此简单的问题,所以我希望有一个简单的答案

我有一个二进制文件(大约35m),从偏移量1536开始,每2048字节有64字节的填充数据-我只想删除这个填充

第一次出现是1536,然后是364857607872,以此类推

(2112字节-64字节的虚拟数据=2048)

我试过bvi、bbe、hexdump+sed+xxd,但显然我遗漏了一些东西


提前感谢,

您没有显示任何代码,因此我想您需要帮助了解算法。其实很简单:

  • 虽然你还没有达到标准的EOF,
  • 从标准输入读取2112字节
  • 从读取的字节中,删除从位置1536开始的64个字节
  • 将剩余的2048字节打印到标准输出
  • 在Perl中

    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。。。