[python] Python을 사용하여 전체 압축 tar 파일을 만드는 방법은 무엇입니까?

Python에서 압축하여 .tar.gz 파일을 어떻게 만들 수 있습니까?



답변

전체 디렉토리 트리에 대한 .tar.gz(일명 .tgz) 을 빌드하려면 :

import tarfile
import os.path

def make_tarfile(output_filename, source_dir):
    with tarfile.open(output_filename, "w:gz") as tar:
        tar.add(source_dir, arcname=os.path.basename(source_dir))

이렇게하면 이름과 내용이 같은 단일 최상위 폴더가 포함 된 gzip 압축 된 tar 아카이브가 생성됩니다 source_dir.


답변

import tarfile
tar = tarfile.open("sample.tar.gz", "w:gz")
for name in ["file1", "file2", "file3"]:
    tar.add(name)
tar.close()

tar.bz2 압축 파일을 만들려면 파일 확장자 이름을 “.tar.bz2″로, “w : gz”를 “w : bz2″로 바꾸십시오.


답변

“gzip 압축 쓰기를 위해 열기”를 의미하는으로 tarfile.open 을 호출합니다 mode='w:gz'.

당신은 아마 파일 이름 (끝 할 수 있습니다 name에 인수 open로)를 .tar.gz,하지만 압축 능력에 영향을주지 않습니다.

BTW, 일반적으로를 사용하여 압축 할 수 있는 것보다 더 잘 압축 할 수있는 'w:bz2'것과 마찬가지로 .tarbzip2gzip


답변

이전 답변은 tarfilePython 모듈을 사용하여 Python에서 .tar.gz파일 을 만드는 것이 좋습니다. 이것은 분명히 좋은 Python 스타일의 솔루션이지만 보관 속도에 심각한 단점이 있습니다. 이 질문 은 Linux tarfiletar유틸리티 보다 약 2 배 느리다 는 것을 언급합니다 . 내 경험에 따르면이 추정은 꽤 정확합니다.

따라서 더 빠른 보관을 위해 모듈을 사용하여 tar명령을 사용할 수 있습니다 subprocess.

subprocess.call(['tar', '-czf', output_filename, file_to_archive])


답변

이 tar.gz 파일에서 열린보기 디렉토리에서 압축하십시오. 해결에서 os.path.basename (file_directory)을 사용하십시오.

with tarfile.open("save.tar.gz","w:gz"):
      for file in ["a.txt","b.log","c.png"]:
           tar.add(os.path.basename(file))

tar.gz 파일에서의 사용 디렉토리에서 압축


답변

@Aleksandr Tukallo의 답변 외에도 출력 및 오류 메시지 (발생한 경우)를 얻을 수 있습니다. 를 사용하여 폴더를 압축하는 tar것은 다음 답변 에 꽤 잘 설명되어 있습니다.

import traceback
import subprocess

try:
    cmd = ['tar', 'czfj', output_filename, file_to_archive]
    output = subprocess.check_output(cmd).decode("utf-8").strip()
    print(output)
except Exception:
    print(f"E: {traceback.format_exc()}")       


답변