2017-03-01 6 views
0

Unicode/UTF-8の.torrentファイルの内容を持つマスターリストテキストファイルを生成する必要があります。このファイルを検索すると、特定のファイルとそのトレントが検索されます。トレントからUnicodeでメタデータを読む

同様の質問がここに答えた: Reading the fileset from a torrent

しかし、コメントの一つが解決スクリプトは、Unicodeの問題を持っているということでした。 "いくつかのユニコード問題はありますが、動作します:) - xvan Sep 27 '16 at 3:36"

このスクリプトを修正してユニコード対応にするにはどうしたらいいですか?ここで

+1

私はここにスクリプト、またはあなたが持っている任意の特定の問題が表示されません。 SOへのリンクは、実際にあなたが問題を抱えているコードを掲示し、あなたの問題を説明するための有効な置き換えにはなりません。 –

+0

すでに自分自身で問題を解決しました。ここでは、トレントファイル名/パスとファイル名をUnicodeで処理するワーキングコードがあります。 – Alix

答えて

0
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 

n = 0 
if __name__ == "__main__": 
    data = open("C:\\Torrents\\test.torrent", "rb").read() 
    torrent = decode(data) 
    for file in torrent["info"]["files"]: 
     n = n + 1 
     filenamepath = file["path"]  
     print str(n) + " -- " + ', '.join(map(str, filenamepath)) 
     fname = ', '.join(map(str, filenamepath)) 

     print fname + " -- " + str(file["length"]) 
0

はlibtorrentを使用してコードです:

import libtorrent 

info = libtorrent.torrent_info('C:\\Torrents\\test.torrent') 

n = 0 
for f in info.files(): 
    #print (f.path, f.size) 
    # print "%s - %s" % (f.path, f.size) 
    n = n + 1 
    filenamepath = str(f.path) 
    filesize = str(f.size) 
    print str(n) + " -- " + filenamepath + " -- " + str(filesize) 
関連する問題