首页 > 解决方案 > 如何读取文件的确切字节?

问题描述

import sys

def XoR(filename, operand): 
   byte = bytearray(1024)    
   with open(filename, "rb") as file:    
      reAd = file.readinto(byte)    
      while True:    
         reAd = file.readinto(byte)    
         for i in range(reAd):    
            byte[i] ^= operand
         sys.stdout.buffer.write(byte)

def main():   
   return XoR(sys.argv[1], int(sys.argv[2]))

if __name__ == '__main__':   
   main()

我不确定我应该如何修改我的代码,以便输出的总字节数与输入文件中的总字节数完全相同。根据我的代码,输出是 1024 的倍数,这是缓冲区的初始大小。我该怎么做才能输出最后一个块中的相关字节而不是整个缓冲区?我应该创造一个条件来处理最后一个块吗?

标签: pythonpython-3.x

解决方案


  • 选项 1:readinto仅将与操作返回的字节数一样多的字节写回文件。

    sys.stdout.buffer.write(byte[:reAd])
    
  • 选项 2:不要使用readinto.

    def XoR(filename, operand):  
        with open(filename, "rb") as file:
            while True:    
                chunk = file.read(1024)
                if not chunk:
                    break
    
                chunk = bytes(byte ^ operand for byte in chunk)
                sys.stdout.buffer.write(chunk)
    

推荐阅读