本文实例讲述了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