Python 在“中”打开文件到底意味着什么;rb";模式
我刚开始学习Python2.X。我正在尝试使用Python加密一个文件。专业用户都在使用pycrpto,而我只是在做一个简单的项目来探索python在“rb”中打开的文件中的一些基础知识。代码如下:Python 在“中”打开文件到底意味着什么;rb";模式,python,encryption,Python,Encryption,我刚开始学习Python2.X。我正在尝试使用Python加密一个文件。专业用户都在使用pycrpto,而我只是在做一个简单的项目来探索python在“rb”中打开的文件中的一些基础知识。代码如下: def BinXor(tBIN, kBIN): tLength = len(tBIN) kLength = len(kBIN) if tLength > kLength: while True: kBIN = kBIN + kBI
def BinXor(tBIN, kBIN):
tLength = len(tBIN)
kLength = len(kBIN)
if tLength > kLength:
while True:
kBIN = kBIN + kBIN
if not len(kBIN) < tLength:
break
kBINXOR = kBIN[:tLength]
return "".join(["%x" % (int(x, 2) ^ int(y, 2)) for (x, y) in
zip(tBIN,kBINXOR)])
def question():
t = open("b.xlsx",'rb').read()
k = '00101101'
print BinXor(t,k)
如果从open file语句中删除“b”,则错误相同。我已经在这里读了几个相关的问题,但仍然找不到线索。有人能帮我吗?为什么我的代码不起作用?在“rb”模式下打开的文件的结果中到底是什么?您的错误与
打开
无关。错误消息明确指出,问题在于以'P'
作为参数调用int
函数。由于'P'
不代表二进制数,int
将失败。谢谢,Blottosmetek!我的固有想法是,自从我在“rb”中打开以来,我应该只得到二进制值/数字。在“rb”中打开文件的结果不是这样的吗?不,区别在于,如果以文本模式打开文件(不带b
),则将其视为字符串序列;如果以二进制模式打开文件,它将被视为一个字节序列
。这意味着没有进行字符集解码。它看起来像是返回一个字节字符串。每个字节都可以转换为int,但字符串本身不是数字。请尝试查看struct
module-@OldGeeksGuide:字节字符串的元素是整数(尽管正如您所说,字符串本身不是整数)。谢谢大家的帮助。现在我可以更好地理解我以前读过的一篇文章了。我查看了“Stroked”,但很难为我的数据找到正确的“fmt”。这个技巧(bin(int(binascii.hexlify(b),16))[2:].zfill(8))似乎可以满足我需要的8位0和1。现在,最后一个问题,在我做了XoR加密之后,再做另一个XoR解密,我如何用“wb”模式写回它们?