python tarfile 没有完整路径

发布于 2024-10-12 22:22:42 字数 405 浏览 3 评论 0原文

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

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()

I made a small script as below to read group of files and tar them, its all working fine accept that the compressed file contain full path of the files when uncompressed. Is there a way to do it without the directory structure?

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()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

这个俗人 2024-10-19 22:22:43

看一下 TarFile.add 签名:

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

Take a look at the TarFile.add signature:

... If given, arcname specifies an alternative name for the file in the archive.

睫毛溺水了 2024-10-19 22:22:43

我创建了一个上下文管理器来更改当前工作目录,以便使用 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)

I created a context manager for changing the current working directory fo handling this with tar files.

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

Then, to package everything up in your case:

with cd_change(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT)):
    for file in os.listdir('.'):
        compressor.add(file)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文