2017-03-01 2 views
0

Ich muss eine Master-List-Textdatei mit dem Inhalt in Unicode/UTF-8 von .torrent-Dateien generieren. In dieser Datei kann nach einer bestimmten Datei und dem Torrent, aus dem sie stammt, gesucht werden.Lesen von Metadaten in Unicode aus einem Torrent

ähnliche Frage wurde beantwortet: Reading the fileset from a torrent

Aber einer der Kommentare war, dass die Lösung Skript Unicode Problem hat. "Hat einige Unicode-Problem, aber funktioniert :) - xvan 27. September 16 um 03:36

Wie dieses Skript ändern, um es Unicode-fähig zu machen?

+1

I, die Sie haben nicht ein Skript hier, oder irgendwelche spezifischen Probleme sehen. Ein Link, selbst zu SO, ist kein gültiger Ersatz für die tatsächliche Veröffentlichung des Codes, mit dem Sie Probleme haben, und beschreibt Ihr Problem. –

+0

Bereits das Problem selbst gelöst. Hier ist der Arbeitscode, der Torrent-Dateinamen/Pfad und Dateinamen innerhalb des Torrents in Unicode behandelt. – Alix

Antwort

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

Hier ist der Code 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)