Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何读取文件的确切字节?_Python_Python 3.x - Fatal编程技术网

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

Python 如何读取文件的确切字节?,python,python-3.x,Python,Python 3.x,我不确定应该如何修改代码,使输出的总字节数与输入文件中的总字节数完全相同。 根据我的代码,输出是1024的倍数,这是缓冲区的初始大小。 我该怎么做才能使它输出最后一个块中的相关字节,而不是整个缓冲区块?我应该创建一个条件来处理最后一个块吗 选项1:只将readinto操作返回的字节数写回文件 import sys def XoR(filename, operand): byte = bytearray(1024) with open(filename, "rb") as

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

选项1:只将readinto操作返回的字节数写回文件

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()
选项2:不要使用readinto

sys.stdout.buffer.write(byte[:reAd])
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)