2016-09-01 2 views

답변

2

모드를 가지고 tarfile 모듈을 사용해야 만한다. 그런 다음 쓰기 위해 zipfile을 사용하십시오.

import tarfile, zipfile 
tarf = tarfile.open(name='mytar.tar.gz', mode='r|gz') 
zipf = zipfile.ZipFile(file='myzip.zip', mode='a', compression=zipfile.ZIP_DEFLATED) 
for m in tarf: 
    f = tarf.extractfile(m) 
    fl = f.read() 
    fn = m.name 
    zipf.writestr(fn, fl) 
tarf.close() 
zipf.close() 

유효한 tar 파일을 확인하는 is_tarfile()를 사용할 수 있습니다.

아마도 shutil을 사용할 수도 있지만 메모리에서 작동하지 않을 수도 있습니다.

추신 : 내가 수행 한 간략한 테스트에서 디렉토리 인 회원 m에 문제가있을 수 있습니다. 그렇다면 is_dir()을 사용하거나 tarf.getmembers()으로 각 tar 파일 멤버에 대한 정보를 얻고 zip으로 전송할 파일을 tar.gz으로 열어야합니다 (뒤로 탐색 할 수없는 경우) tarf.getmembers() 이후에 수행 할 수 없기 때문에 가능합니다.

+0

시도해 볼 수있는 코드를 제안 해 주시겠습니까? – Geet

+0

@Geet - 수정 된 버전을 확인하십시오. 사과드립니다. 여기 파이썬이 없습니다. 나는 오타/고장을 찾기가 어렵지 않다고 생각한다. –

+0

정말로 도와 주셔서 감사합니다. 한 걸음 더 나아질 것입니다. zipf = ZipFile.open을 zipf = zipfile.ZipFile.open으로 변경했습니다. 이제, "NameError : name 'ZIP_DEFLATED'가 정의되지 않았습니다." – Geet

관련 문제