首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我希望通过python以所需的格式获取流文件的信息。

我希望通过python以所需的格式获取流文件的信息。
EN

Stack Overflow用户
提问于 2022-01-26 11:08:59
回答 1查看 330关注 0票数 0

我正在用python编写代码来解析流文件中的跟踪器信息。

代码语言:javascript
复制
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.opentry ackr.org:1337/announce‘

我想在下面的表单中解析这个值。

"tracker.openbittorrent.com",80

"tracker.opentrackr.org",1337年

我应该如何解析它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-26 11:23:51

为此,可以使用urllib.parse.urlparse,如下所示

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
['tracker.openbittorrent.com', 80]
['tracker.opentrackr.org', 1337]

说明:我提取netloc,然后从右b':'最多拆分一次,然后应用.decode到主机端口将bytes转换为strintbytes转换为int

编辑:经过更仔细的阅读,我注意到您可能会访问.hostname.port,它们允许更简洁的代码来完成该任务,即

代码语言:javascript
复制
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)

提供与上面代码相同的输出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70862501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档