找回密码
 立即注册
搜索
查看: 2863|回复: 10

[其他] 麻烦帮看下我的python代码有啥问题...很短的

[复制链接]
     
发表于 2010-5-2 18:04 | 显示全部楼层 |阅读模式
本帖最后由 赤色彗星SEXY 于 2010-5-2 19:33 编辑

import binascii
f = open('/root/1.cfg','rb')
cfgFile = f.read()
f.close()
newFile = cfgFile[0]
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)[2:])
        else:
            asciiNum=asciiNum/2
            newFile = newFile + binascii.a2b_hex(2*''+hex(asciiNum)[2:])

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)[2:])拿了就可以走完.....但是这个是在哪里影响循环了?
回复

使用道具 举报

     
发表于 2010-5-2 18:45 | 显示全部楼层
虽然不懂python,不过你这
cfgFile = f.read()
f.close()
是不是close得太快了,我想python不会一次性把整个文件读进内存吧。
你去查查api文档吧
回复

使用道具 举报

     
 楼主| 发表于 2010-5-2 18:50 | 显示全部楼层
- -cfgFile[12100+]是有内容的....
回复

使用道具 举报

发表于 2010-5-2 19:19 | 显示全部楼层
……我只想吐槽这 C 味浓浓的 Python
回复

使用道具 举报

发表于 2010-5-2 20:10 | 显示全部楼层
走到12718就报错....搜不出什么结果,把newFile = newFile + binascii.a2b_hex(2*\'\'+hex(asciiNum)[2:])拿了就可以走完.....但是这个是在哪里影响循环了?
赤色彗星SEXY 发表于 2010-5-2 18:04


2*\'\'+hex(asciiNum)[2:] 改成 \'%02x\' % asciiNum
这段代码我很有冲动改成三行以内……
回复

使用道具 举报

     
 楼主| 发表于 2010-5-2 20:11 | 显示全部楼层
从报错的地方再开始循环
for i in range(12719,len(cfgFile)):
走几十次循环再报错....
换报错的地方开始循环几十次又报错.....
妈的是我傻逼还是python傻逼?
回复

使用道具 举报

     
 楼主| 发表于 2010-5-2 20:39 | 显示全部楼层
谢5楼.....想问下我循环出错的原因
回复

使用道具 举报

发表于 2010-5-2 20:51 | 显示全部楼层
谢5楼.....想问下我循环出错的原因
赤色彗星SEXY 发表于 2010-5-2 20:39


看下 binascii 的文档吧,a2b_hex 里边必须是偶数长度的字符串,每两位构成一个字符,虽然我也没看懂你那样写是什么意思……还不如用 ord 和 chr ……
回复

使用道具 举报

     
 楼主| 发表于 2010-5-2 20:53 | 显示全部楼层
本帖最后由 赤色彗星SEXY 于 2010-5-2 20:54 编辑

hex(asciiNum) 把asciiNum转16进制...但是前面多了个ff,于是把结果拿来当字符串处理,把前面的ff替换成空白....

单独执行一直都没问题的,循环几十次就出一次问题,真奇怪
回复

使用道具 举报

发表于 2010-5-2 22:43 | 显示全部楼层
……怎么还没明白,asciiNum < 16 就会出错呗
回复

使用道具 举报

发表于 2010-5-3 01:43 | 显示全部楼层
改变一下风格吧.....oo为啥能发展..是因为易读..你这一写...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-9-18 16:05 , Processed in 0.135376 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表