麻烦帮看下我的python代码有啥问题...很短的
本帖最后由 赤色彗星SEXY 于 2010-5-2 19:33 编辑import binascii
f = open('/root/1.cfg','rb')
cfgFile = f.read()
f.close()
newFile = cfgFile
for i in range(1,len(cfgFile)):
if cfgFile=="\xff":
newFile = newFile + cfgFile
print '%d are xff' %i
else:
print '%d not xff' %i
asciiNum=int(binascii.b2a_hex(cfgFile),16)
if(asciiNum%2==1):
asciiNum=(asciiNum+127)/2
newFile = newFile + binascii.a2b_hex(2*''+hex(asciiNum))
else:
asciiNum=asciiNum/2
newFile = newFile + binascii.a2b_hex(2*''+hex(asciiNum))
len(cfgFile)长度是21000多,但是循环子走到12100这样就结束了,请问下原因是?google不知道怎么找关键词。
cfg文件是522-c的配置文件....
12718 not xff
Traceback (most recent call last):
File "<stdin>", line 12, in <module>
TypeError: Odd-length string
走到12718就报错....搜不出什么结果,把newFile = newFile + binascii.a2b_hex(2*''+hex(asciiNum))拿了就可以走完.....但是这个是在哪里影响循环了? 虽然不懂python,不过你这
cfgFile = f.read()
f.close()
是不是close得太快了,我想python不会一次性把整个文件读进内存吧。
你去查查api文档吧 - -cfgFile是有内容的.... ……我只想吐槽这 C 味浓浓的 Python 走到12718就报错....搜不出什么结果,把newFile = newFile + binascii.a2b_hex(2*\'\'+hex(asciiNum))拿了就可以走完.....但是这个是在哪里影响循环了?
赤色彗星SEXY 发表于 2010-5-2 18:04 http://bbs.saraba1st.com/2b/images/common/back.gif
2*\'\'+hex(asciiNum) 改成 \'%02x\' % asciiNum
这段代码我很有冲动改成三行以内…… 从报错的地方再开始循环
for i in range(12719,len(cfgFile)):
走几十次循环再报错....
换报错的地方开始循环几十次又报错.....
妈的是我傻逼还是python傻逼? 谢5楼.....想问下我循环出错的原因 谢5楼.....想问下我循环出错的原因
赤色彗星SEXY 发表于 2010-5-2 20:39 http://bbs.saraba1st.com/2b/images/common/back.gif
看下 binascii 的文档吧,a2b_hex 里边必须是偶数长度的字符串,每两位构成一个字符,虽然我也没看懂你那样写是什么意思……还不如用 ord 和 chr …… 本帖最后由 赤色彗星SEXY 于 2010-5-2 20:54 编辑
hex(asciiNum) 把asciiNum转16进制...但是前面多了个ff,于是把结果拿来当字符串处理,把前面的ff替换成空白....
单独执行一直都没问题的,循环几十次就出一次问题,真奇怪 ……怎么还没明白,asciiNum < 16 就会出错呗 改变一下风格吧.....oo为啥能发展..是因为易读..你这一写...
页:
[1]