嘿我需要解码十六进制并写入文本文件,但我只能对其进行编码而不是解码。 我编写了一个脚本来编码,它可以工作并打印到名为encoded.txt的文本文件中。
import binascii
with open('encoded.txt','r') as text:
a = text.readlines()
for x in a:
b = binascii.unhexlify(x)
with open('decoded.txt','a') as done:
done.write(b + "\n")
到目前为止,我编码(打印“Hello World!”),它返回7072696e74202248656c6c6f20576f726c642122但是当我尝试解码它时会返回一个错误,指出它是奇怪的长度字符串。这可能是因为我在编码器中使用了“\ n”吗? 三江源
答案 0 :(得分:3)
file.readlines()
返回包含行分隔符的行。
在从十六进制转换为字节之前剥离行分隔符:
b = binascii.unhexlify(x.strip())
str.strip()
删除所有前导和尾随空格(空格,制表符,换行符,回车符等)。由于unhexlify
的十六进制输入应该只包含字母a-z和数字,所以这只是完美的。您可以将其限制为仅使用x.rstrip('\n')
删除尾随换行符 。
请注意file.readlines()
将整个文件读入内存;在这种情况下,您可以逐个处理行并避免内存开销。只打开输出文件 :
with open('encoded.txt','r') as text, open('decoded.txt', 'w') as done:
for line in text:
decoded_line = binascii.unhexlify(line.strip())
done.write(decoded_line + "\n")