初学Python,挑战一下流行的Python Challenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~
主要的问题就是16进制形式的字符如何转成字节码 (注意:不是encoding)
如:['89', '50', '4e', '47', '0d', '0a', '1a', '0a', '00', '00', '00', '0d', '49', '48', '44', '52', '00', '00']
直接转换成
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00' 的形式。
如果使用encode('utf-8'), '\x89'之类的会被转成'\xc2\x89', 不是想要的。
So,直接看代码吧...
'''
Created on May 27, 2014
@author: adam.wang
'''
import difflib
file=open(r'./file/deltas/delta.txt')
data=file.readlines()
matrix1=[]
matrix2=[]
for s in data:
s=s.replace('\n','')
matrix1.append(s[0:53])
matrix2.append(s[56:])
diff=list(difflib.ndiff(matrix1, matrix2))
add_data=b''
minus_data=b''
space_data=b''
for temp in diff:
s=temp[0:1]
t=b''
for b in temp[2:].split():
t+=bytes.fromhex(b)
if s=='+':
add_data+=t
elif s=='-':
minus_data+=t
else:
space_data+=t
open('./level18/add.png','wb').write(add_data)
open('./level18/minus.png','wb').write(minus_data)
open('./level18/space.png','wb').write(space_data)