我想通过 python 获取所需格式的种子文件信息
I want to get the information of a torrent file in a desired format through python
我正在使用 python 编写代码来解析 torrent 文件中的跟踪器信息。
import bencoder
import sys
target = './'+sys.argv[1]
with open(target, 'rb') as torrent_file:
torrent = bencoder.decode(torrent_file.read())
i=0
while True:
try:
print(torrent[b'announce-list'][i])
i+=1
except:
break
输出结果如下
[b'udp://tracker.openbittorrent.com:80/announce']
[b'udp://tracker.opentrackr.org:1337/announce']
我要解析下表中的值
["tracker.openbittorrent.com", 80]
["tracker.opentrackr.org", 1337]
我应该如何解析它?
您可以使用 urllib.parse.urlparse
,如下所示
from urllib.parse import urlparse
url1 = b'udp://tracker.openbittorrent.com:80/announce'
url2 = b'udp://tracker.opentrackr.org:1337/announce'
c1 = urlparse(url1)
c2 = urlparse(url2)
hostport1 = c1.netloc.rsplit(b':',1)
hostport2 = c2.netloc.rsplit(b':',2)
hostport1[0] = hostport1[0].decode()
hostport1[1] = int(hostport1[1])
hostport2[0] = hostport2[0].decode()
hostport2[1] = int(hostport2[1])
print(hostport1)
print(hostport2)
输出
['tracker.openbittorrent.com', 80]
['tracker.opentrackr.org', 1337]
说明:我提取了netloc,然后从右边b':'
开始最多拆分一次,然后将.decode
应用于主机端口将bytes
转换为str
并且int
将 bytes
转换为 int
.
编辑:仔细阅读后,我注意到您可能会访问 .hostname
和 .port
,它们允许使用更简洁的代码来完成该任务,即
from urllib.parse import urlparse
url1 = b'udp://tracker.openbittorrent.com:80/announce'
url2 = b'udp://tracker.opentrackr.org:1337/announce'
c1 = urlparse(url1)
c2 = urlparse(url2)
hostport1 = [c1.hostname.decode(), c1.port]
hostport2 = [c2.hostname.decode(), c2.port]
print(hostport1)
print(hostport2)
给出与上面代码相同的输出。
我正在使用 python 编写代码来解析 torrent 文件中的跟踪器信息。
import bencoder
import sys
target = './'+sys.argv[1]
with open(target, 'rb') as torrent_file:
torrent = bencoder.decode(torrent_file.read())
i=0
while True:
try:
print(torrent[b'announce-list'][i])
i+=1
except:
break
输出结果如下
[b'udp://tracker.openbittorrent.com:80/announce']
[b'udp://tracker.opentrackr.org:1337/announce']
我要解析下表中的值
["tracker.openbittorrent.com", 80]
["tracker.opentrackr.org", 1337]
我应该如何解析它?
您可以使用 urllib.parse.urlparse
,如下所示
from urllib.parse import urlparse
url1 = b'udp://tracker.openbittorrent.com:80/announce'
url2 = b'udp://tracker.opentrackr.org:1337/announce'
c1 = urlparse(url1)
c2 = urlparse(url2)
hostport1 = c1.netloc.rsplit(b':',1)
hostport2 = c2.netloc.rsplit(b':',2)
hostport1[0] = hostport1[0].decode()
hostport1[1] = int(hostport1[1])
hostport2[0] = hostport2[0].decode()
hostport2[1] = int(hostport2[1])
print(hostport1)
print(hostport2)
输出
['tracker.openbittorrent.com', 80]
['tracker.opentrackr.org', 1337]
说明:我提取了netloc,然后从右边b':'
开始最多拆分一次,然后将.decode
应用于主机端口将bytes
转换为str
并且int
将 bytes
转换为 int
.
编辑:仔细阅读后,我注意到您可能会访问 .hostname
和 .port
,它们允许使用更简洁的代码来完成该任务,即
from urllib.parse import urlparse
url1 = b'udp://tracker.openbittorrent.com:80/announce'
url2 = b'udp://tracker.opentrackr.org:1337/announce'
c1 = urlparse(url1)
c2 = urlparse(url2)
hostport1 = [c1.hostname.decode(), c1.port]
hostport2 = [c2.hostname.decode(), c2.port]
print(hostport1)
print(hostport2)
给出与上面代码相同的输出。