没有完整路径的python tarfile

时间:2011-01-20 18:30:16

标签: python django tar

我做了一个如下的小脚本来读取文件组并对它们进行tar,它的工作正常,接受压缩文件包含未压缩文件的完整路径。有没有办法在没有目录结构的情况下做到这一点?

compressor = tarfile.open(PATH_TO_ARCHIVE + re.sub('[\s.:"-]+', '', 
    str(datetime.datetime.now())) + '.tar.gz', 'w:gz')

for file in os.listdir(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT)):
    compressor.add(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT) + file)

compressor.close()

2 个答案:

答案 0 :(得分:7)

查看TarFile.add签名:

  

...如果给定,arcname指定存档中文件的备用名称。

答案 1 :(得分:2)

我创建了一个上下文管理器,用于更改当前工作目录,以便使用tar文件处理它。

import contextlib
@contextlib.contextmanager
def cd_change(tmp_location):
    cd = os.getcwd()
    os.chdir(tmp_location)
    try:
        yield
    finally:
        os.chdir(cd)

然后,在你的情况下打包一切:

with cd_change(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT)):
    for file in os.listdir('.'):
        compressor.add(file)