2012-05-22 12 views
8

Deseo usar PyLZMA para extraer un archivo de un archivo comprimido (por ejemplo, test.7z) y extraerlo en el mismo directorio.Ejemplo de cómo usar PyLZMA

Soy un novato en Python y no tengo ni idea de cómo empezar. He hecho algunas búsquedas en Google y encontré some examples y docs, pero no entiendo cómo funcionan.

¿Podría alguien publicar el código básico de lo que quiero hacer para poder comenzar a trabajar y entender?

+3

¿Podría mostrar algunos ejemplos de lo que ha intentado y cómo ha fallado? – Levon

+0

Parece que esta biblioteca está completamente indocumentada, excepto algunas docstrings del tipo 'clase Base (objeto):" "" base oject "" "' ... –

+0

La gente aquí generalmente desaprueba las preguntas de "dame el código", intenta para mostrar un poco de esfuerzo, muéstranos lo que has encontrado, probado y lo que te estás perdiendo, y obtendrás un mejor soporte. – KurzedMetal

Respuesta

11

Aquí está una clase de Python para manejar la funcionalidad básica. Lo he usado para mi propio trabajo:

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

Éstos son dos fragmentos de código que encontré aquí 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

Los fragmentos similares ya están en github.com/fancycode/pylzma/blob/master/doc/usage.txt; también, 's.flush()' debe tenerse en cuenta para el caso de descompresión. (aún así, de alguna manera, google busca clientes aquí primero, heh) – HoverHell

+0

Como OP desea extraer un archivo de un archivo, no creo que esto responda a la pregunta y me parece sorprendente que haya sido votado en absoluto. – martineau

+1

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

Cuestiones relacionadas