python面试题及答案bt_Python实现解析Bit Torrent种子文件内容的方法

本文实例讲述了Python实现解析BitTorrent种子文件内容的方法。分享给大家供大家参考,具体如下:

有很多种子文件,有时候记不清里面都是什么东西,又不想一个一个的拖放到迅雷或BT软件里头看,

上网查了一下Python的脚本,自己也稍微修改了一下,代码如下,粘贴到文本编辑器中:

保存成py后缀的,直接运行

import re

def tokenize(text, match=re.compile("([idel])|(/d+):|(-?/d+)").match):

i = 0

while i < len(text):

m = match(text, i)

s = m.group(m.lastindex)

i = m.end()

if m.lastindex == 2:

yield "s"

yield text[i:i+int(s)]

i = i + int(s)

else:

yield s

def decode_item(next, token):

if token == "i":

# integer: "i" value "e"

data = int(next())

if next() != "e":

raise ValueError

elif token == "s":

# string: "s" value (virtual tokens)

data = next()

elif token == "l" or token == "d":

# Container: "l" (or "d") values "e"

data = []

tok = next()

while tok != "e":

data.append(decode_item(next, tok))

tok = next()

if token == "d":

data = dict(zip(data[0::2], data[1::2]))

else:

raise ValueError

return data

def decode(text):

try:

src = tokenize(text)

data = decode_item(src.next, src.next())

for token in src: # look for more tokens

raise SyntaxError("trailing junk")

except (AttributeError, ValueError, StopIteration):

raise SyntaxError("syntax error")

return data

if __name__ == "__main__":

#需要读取的文件名称放到这里

data = open("The_Shawshank_Redemption.torrent", "rb").read()

torrent = decode(data)

myfile = file("testit.txt", 'w')

a = u'文件名称'.encode('gbk')

b = u'文件大小'.encode('gbk')

print "%s /t %s /n" % (a,b)

for file in torrent["info"]["files"]:

print "%s /t %d Mb " % ("/".join(file["path"]), file["length"]/1024/1024)

print "-----------------------------------------------------------------"

注意要保存成Utf-8格式的文件,不能使用ASCII编码格式保存,否则中文会乱码或无法编译

PS:这里再为大家推荐一款相关的在线工具供大家参考使用:

希望本文所述对大家Python程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值