功能如题,注意问题如下:
1.默认写入注册表关联种子文件,不喜欢修改源码 winreg.SetValue 那几行注释掉;
2.默认转换个人下载文件夹中的种子文件并将磁力链接复制到剪切板;
3.如果python版本较旧,请修改torrent_file_to_magnet(torrent_file)函数中的[b'info'][b'name'] 把 b 去掉再试;
4.默认转换成功后,删除种子文件,不喜欢可修改最后一行。
[Python] 纯文本查看 复制代码 ######################################
#种子文件批量转换成磁力链
#运行前需要安装依赖
# pip install bencode.py==3.0.1
# Pip install pyperclip
#可以打包成可执行程序
# Pip install pyinstaller
# Pyinstaller -F torrent2magnet.py
######################################
#import sys,os
#print(r'C:\Windows\py.exe "'+ __file__ +r'" %1')
import winreg
import bencode
import hashlib
import os
import pyperclip
import sys
from urllib.parse import quote
data_dir = os.environ['USERPROFILE']+'\Downloads'
###print(sys.argv)
if len(sys.argv)==2:
if os.path.isdir(sys.argv[1]):
###print(sys.argv[1])
data_dir = sys.argv[1]
elif os.path.isfile(sys.argv[1]):
###print(os.path.dirname(sys.argv[1]))
data_dir = os.path.dirname(sys.argv[1])
else:
try:
winreg.SetValue(winreg.HKEY_CLASSES_ROOT, r".torrent",winreg.REG_SZ,r"Torrent.Document")
winreg.SetValue(winreg.HKEY_CLASSES_ROOT, r"Torrent.Document\shell\open\command",winreg.REG_SZ,sys.executable+r' "'+ __file__ +r'" %1')
print(sys.executable+r' "'+ __file__ +r'" %1')
print("已成功关联种子文件")
except:
print('请在“以管理员身份运行”的CMD窗口中调用本程序,命令行如下: \npy "'+__file__+'"')
print('如果已经可以正常双击“种子”文件进行转换,请忽略!')
print('')
###os.system("pause")
torrent=[]
magnet=[]
def torrent_file_to_magnet(torrent_file):
data = open(torrent_file, 'rb').read()
metadata = bencode.bdecode(data)
# print(metadata)
name = metadata[b'info'][b'name']
dn = quote(name)
info_bts = bencode.bencode(metadata[b'info'])
info_hash = hashlib.sha1(info_bts).hexdigest()
return f'magnet:?xt=urn:btih:{info_hash}'#&dn={dn}'
'''
if __name__ == '__main__':
print(torrent_file_to_magnet('[ThZu.Cc][ThZu.Cc]020421-001-carib-1080p.torrent'))
'''
"""--------------------------------------------------------
<<获取文件列表>>
(1) os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
这个列表以字母顺序。 它不包括 '.' 和'..' 即使它在文件夹中。只支持在
Unix, Windows 下使用。
(2) os.path.join(path1[, path2[, ...]]) 把目录和文件名合成一个路径
---------------------------------------------------------"""
"""获取文件列表"""
def getRawFileList(path):
"""-------------------------
files,names=getRawFileList(raw_data_dir)
files: ['datacn/dialog/one.txt', 'datacn/dialog/two.txt']
names: ['one.txt', 'two.txt']
----------------------------"""
files = []
names = []
for f in os.listdir(path):
if not f.endswith("~") or not f == "" : # 返回指定的文件夹包含的文件或文件夹的名字的列表
files.append(os.path.join(path, f)) # 把目录和文件名合成一个路径
names.append(f)
return files, names
files,names = getRawFileList(data_dir)
'''print("files:", files)
print("names:", names)'''
for tf in files:
if tf.endswith(".torrent"):
torrent.append(tf)
'''print(torrent)'''
for to in torrent:
magnet.append(torrent_file_to_magnet(to))
txt=""
for l in magnet:
print(l)
txt=l+'\n'+txt
print("成功转换",len(magnet),"个磁力链接")
pyperclip.copy(txt)
os.system("pause")
for i in torrent:
os.remove(i) |