初学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,直接看代码吧...
1''' 2Created on May 27, 2014 3 4@author: adam.wang 5''' 6import difflib 7 8file=open(r'./file/deltas/delta.txt') 9data=file.readlines() 10 11matrix1=[] 12matrix2=[] 13 14for s in data: 15 s=s.replace('\n','') 16 matrix1.append(s[0:53]) 17 matrix2.append(s[56:]) 18 19diff=list(difflib.ndiff(matrix1, matrix2)) 20 21add_data=b'' 22minus_data=b'' 23space_data=b'' 24 25for temp in diff: 26 s=temp[0:1] 27 t=b'' 28 for b in temp[2:].split(): 29 t+=bytes.fromhex(b) 30 if s=='+': 31 add_data+=t 32 elif s=='-': 33 minus_data+=t 34 else: 35 space_data+=t 36 37open('./level18/add.png','wb').write(add_data) 38open('./level18/minus.png','wb').write(minus_data) 39open('./level18/space.png','wb').write(space_data)