如何读取文件的确切字节?

时间:2019-02-09 09:24:48

标签: python python-3.x

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的倍数,即缓冲区的初始大小。 我该怎么办,以便它在最后一块而不是整个缓冲区中输出相关字节?我应该创建一个条件来处理最后一个块吗?

1 个答案:

答案 0 :(得分:1)

  • 选项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)