Python tarfile 不包含完整路径

6
我编写了一个小脚本,如下所示,用于读取一组文件并将它们打包,一切都正常工作,但压缩后的文件在解压缩时会包含完整的文件路径。有没有一种方法可以在不包含目录结构的情况下完成打包?
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个回答

8

看一下TarFile.add的签名:

... 如果给定,arcname指定了存档文件中该文件的替代名称。


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)

谢谢Grant,感谢你在这件事上的帮助。它起作用了。我之前发布了另一个问题,看起来你也是可以在另一个问题上提供帮助的人。链接:http://stackoverflow.com/questions/4725685/django-auto-filling-some-data-based-on-model-attribute 非常感谢。 - Mo J. Mughrabi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接