2012-05-22 12 views
8

Ich möchte PyLZMA verwenden, um eine Datei aus einem Archiv (z. B. test.7z) zu extrahieren und es in das gleiche Verzeichnis zu extrahieren.Beispiel für die Verwendung von PyLZMA

Ich bin ein Neuling für Python und habe keine Ahnung, wie ich anfangen soll. Ich habe etwas googeln und gefunden some examples und docs, aber ich verstehe nicht, wie sie funktionieren.

Könnte jemand bitte den grundlegenden Code für das, was ich tun möchte, posten, damit ich anfangen kann zu arbeiten und zu verstehen?

+3

Können Sie einige Beispiele zeigen, was Sie versucht haben und wie es gescheitert ist? – Levon

+0

Es scheint, dass diese Bibliothek in der Tat völlig undokumentiert ist, außer einigen Docstrings der Art "Klasse Base (Objekt):" "Base Oject" "" ... –

+0

Leute hier normalerweise missbilligend auf "gib mir den Code" Fragen, versuchen Zeigen Sie uns, was Sie gefunden, versucht und was Sie vermisst haben und Sie werden besser unterstützt. – KurzedMetal

Antwort

11

Hier ist eine Python-Klasse die grundlegende Funktionalität zu behandeln. Ich habe es für meine eigene Arbeit verwendet:

import py7zlib 
class SevenZFile(object): 
    @classmethod 
    def is_7zfile(cls, filepath): 
     ''' 
     Class method: determine if file path points to a valid 7z archive. 
     ''' 
     is7z = False 
     fp = None 
     try: 
      fp = open(filepath, 'rb') 
      archive = py7zlib.Archive7z(fp) 
      n = len(archive.getnames()) 
      is7z = True 
     finally: 
      if fp: 
       fp.close() 
     return is7z 

    def __init__(self, filepath): 
     fp = open(filepath, 'rb') 
     self.archive = py7zlib.Archive7z(fp) 

    def extractall(self, path): 
     for name in self.archive.getnames(): 
      outfilename = os.path.join(path, name) 
      outdir = os.path.dirname(outfilename) 
      if not os.path.exists(outdir): 
       os.makedirs(outdir) 
      outfile = open(outfilename, 'wb') 
      outfile.write(self.archive.getmember(name).read()) 
      outfile.close() 
3

Hier sind zwei Code-Snippets ich hier gefunden habe http://www.linuxplanet.org/blogs/?cat=3845

# Compress the input file (as a stream) to a file (as a stream) 
i = open(source_file, 'rb') 
o = open(compressed_file, 'wb') 
i.seek(0) 
s = pylzma.compressfile(i) 
while True: 
    tmp = s.read(1) 
    if not tmp: break 
    o.write(tmp) 
o.close() 
i.close() 

# Decomrpess the file (as a stream) to a file (as a stream) 
i = open(compressed_file, 'rb') 
o = open(decompressed_file, 'wb') 
s = pylzma.decompressobj() 
while True: 
    tmp = i.read(1) 
    if not tmp: break 
    o.write(s.decompress(tmp)) 
o.close() 
i.close() 
+3

Ähnliche Snippets sind bereits in github.com/fancycode/pylzma/blob/master/doc/usage.txt; auch sollte 's.flush()' für den Dekomprimierungsfall beachtet werden. googeln führt hier zuerst, heh) – HoverHell

+0

Da das OP eine Datei aus einem Archiv extrahieren will, glaube ich nicht, dass dies die Frage beantwortet und finde es erstaunlich, dass es überhaupt noch abgestimmt wurde. – martineau

+1

usage.txt -> usage .md @ https://github.com/fancycode/pylzma/blob/master/doc/USAGE.md – philshem