本文实例讲述了Python实现解析BitTorrent种子文件内容的方法。分享给大家供大家参考,具体如下:
有很多种子文件,有时候记不清里面都是什么东西,又不想一个一个的拖放到迅雷或BT软件里头看,
上网查了一下Python的脚本,自己也稍微修改了一下,代码如下,粘贴到文本编辑器中:
保存成py后缀的,直接运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
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编码格式保存,否则中文会乱码或无法编译
希望本文所述对大家Python程序设计有所帮助。
原文链接:http://blog.csdn.net/nickwar/article/details/4934327