Python实现解析Bit Torrent种子文件内容的方法


Posted in Python onAugust 29, 2017

本文实例讲述了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编码格式保存,否则中文会乱码或无法编译

Python 相关文章推荐
Python比较两个图片相似度的方法
Mar 13 Python
Python新手实现2048小游戏
Mar 31 Python
python连接字符串的方法小结
Jul 13 Python
python cx_Oracle模块的安装和使用详细介绍
Feb 13 Python
Python实现备份MySQL数据库的方法示例
Jan 11 Python
python实现俄罗斯方块游戏
Mar 25 Python
python实现换位加密算法的示例
Oct 14 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
Python PyQt5模块实现窗口GUI界面代码实例
May 12 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 #Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 #Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 #Python
Python开发的HTTP库requests详解
Aug 29 #Python
Python实现按学生年龄排序的实际问题详解
Aug 29 #Python
详解Python进程间通信之命名管道
Aug 28 #Python
基于Python闭包及其作用域详解
Aug 28 #Python
You might like
PHP 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
PHP下MAIL的另一解决方案
2006/10/09 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
php析构函数的简单使用说明
2015/08/24 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
深入浅析javascript立即执行函数
2015/10/23 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
javascript断点调试心得分享
2016/04/23 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
webpack实现一个行内样式px转vw的loader示例
2018/09/13 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
.NET面试10题
2014/02/24 面试题
建筑班组长岗位职责
2014/01/02 职场文书
文体活动实施方案
2014/03/27 职场文书
就业意向书
2014/07/29 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
女性健康知识讲座通知
2015/04/23 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
数据库连接池
2021/04/06 MySQL
python3.9之你应该知道的新特性详解
2021/04/29 Python
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js