2012-05-22 2 views
8

PyLZMA을 사용하여 아카이브 (예 : test.7z)에서 파일을 추출하고 같은 디렉토리에 압축을 풀고 싶습니다.PyLZMA 사용법 예제

저는 파이썬의 초보자이며 시작하는 법을 모릅니다. Google 검색을 완료했으며 some examplesdocs을 찾았지만 어떻게 작동하는지 이해할 수 없습니다.

누군가 내가하고 싶은 일에 대한 기본 코드를 게시하여 일하고 이해할 수 있습니까?

+3

당신이 시도한 것과 실패한 방법에 대한 몇 가지 예를 보여줄 수 있습니까? – Levon

+0

'class Base (object) : "" "base oject" ""'... –

+0

사람들이 여기에 보통 "코드를 줘"라는 질문에 눈살을 찌푸린 채,이 라이브러리는 실제로 완전히 문서화되지 않은 것 같습니다. 어떤 노력을 보이기 위해, 당신이 찾은 것, 시도한 것 그리고 누락 된 것을 우리에게 보여 주면 더 나은 지원을받을 수 있습니다. – KurzedMetal

답변

11

이 기본 기능을 처리하는 파이썬 클래스입니다 여기 두 개의 코드 조각입니다. 나는 내 자신의 일을 위해 그것을 사용했다 :

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

여기에 내가 여기 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

비슷한 발췌 문장은 이미 github.com/fancycode/pylzma/blob/master/doc/usage.txt에 있으며 또한's.flush()'는 압축 해제의 경우에주의해야합니다. (그러나 어쨌든, 먼저 여기에서 인터넷 검색을 수행합니다. – HoverHell

+0

OP가 아카이브에서 파일을 추출하려고하므로이 질문에 대답하지 않았고 전혀 투표하지 않은 것을 알게되었습니다. – martineau

+1

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