python - 如何读取文件的确切字节?
问题描述
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:
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)
推荐阅读
- python - 如何用正则表达式同时搜索两个可能的引号?
- javascript - 如何停止动画Javascript?
- clang - 如何使用clang交叉编译aarch64?
- typescript - 有没有办法将 TypeScript 项目中的 MD 文件移动到项目的编译 JS 版本?
- ruby - 如何将 Ruby 连接到 Postgresql?
- c# - 无法从 FormData 获取值 - angularJS
- python - Python Tkinter 将目录中的所有图像存储在向量中
- laravel - Laravel - 如何防止登录和中间件后重定向?
- firebase - 警告:无法检测我们是否在 Google Compute Engine 上运行
- javascript - Sequelize 迁移不会从模型中迁移多个字段