gpt4 book ai didi

python - 如何在不包含父目录的情况下在 Python/tar 中创建 tar.gz 存档?

转载 作者:行者123 更新时间:2023-12-04 17:32:19 27 4
gpt4 key购买 nike

我有一个包含 FolderB 和 FileB 的 FolderA。如何创建仅包含 FolderB 和 FileB 的 tar.gz 存档,删除父目录 FolderA?我正在使用 Python,并且正在 Windows 机器上运行此代码。

我发现的最好的线索是:How to create full compressed tar file using Python?

在最受好评的答案中,人们讨论了删除父目录的方法,但没有一个对我有用。我试过 arcname、os.walk 和通过 subprocess.call() 运行 tar 命令。

我接近 os.walk,但在下面的代码中,它仍然在 FolderB 和 FileB 中放置了一个“_”目录。所以,文件结构是ARCHIVE.tar.gz > ARCHIVE.tar > “_”目录,FolderB,FileB。

def make_tarfile(output_filename, source_dir):
with tarfile.open(output_filename, "w:gz") as tar:
length = len(source_dir)
for root, dirs, files in os.walk(source_dir):
folder = root[length:] # path without "parent"
for file in files:
tar.add(os.path.join(root, folder), folder)

我使用以下方法制作存档:

make_tarfile('ARCHIVE.tar.gz', 'C:\FolderA')

我应该继续使用 os.walk,还是有其他方法可以解决这个问题?

更新

Here is an image showing the contents of my archive.如您所见,我的存档中有一个“_”文件夹,我想删除它——奇怪的是,当我解压缩时,只有 FolderA 和 FileB.html 显示为已存档。从本质上讲,行为是正确的,但如果我能从存档中删除“_”文件夹的最后一步,那就完美了。我要问一个更新的问题以减少混淆。

最佳答案

这对我有用:

with tarfile.open(output_filename, "w:gz") as tar:
for fn in os.listdir(source_dir):
p = os.path.join(source_dir, fn)
tar.add(p, arcname=fn)
即只需列出源目录的根目录并将每个条目添加到存档中。无需遍历源目录,因为通过 tar.add() 添加目录是自动递归的。

关于python - 如何在不包含父目录的情况下在 Python/tar 中创建 tar.gz 存档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58422133/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com