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实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
Python快速排序算法实例分析
Nov 29 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
Python实现的多项式拟合功能示例【基于matplotlib】
May 15 Python
Python查找最长不包含重复字符的子字符串算法示例
Feb 13 Python
如何基于python生成list的所有的子集
Nov 11 Python
使用python-opencv读取视频,计算视频总帧数及FPS的实现
Dec 10 Python
pyqt5中动画的使用详解
Apr 01 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
Python基于Webhook实现github自动化部署
Nov 28 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 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微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
一系列Bootstrap导航条使用方法分享
2016/04/29 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
python中base64加密解密方法实例分析
2015/05/16 Python
python实现音乐播放器 python实现花框音乐盒子
2020/02/25 Python
python——全排列数的生成方式
2020/02/26 Python
keras中的History对象用法
2020/06/19 Python
python爬取天气数据的实例详解
2020/11/20 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
英国家电直销:Appliances Direct
2016/09/22 全球购物
Julep官网:美容产品和指甲油
2017/02/25 全球购物
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
机电工程学生自荐信范文
2013/12/07 职场文书
公司晚会策划方案
2014/05/17 职场文书
生物工程专业求职信
2014/09/03 职场文书
Java 数组内置函数toArray详解
2021/06/28 Java/Android
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android