【发布时间】:2019-10-16 21:50:50
【问题描述】:
我有一个包含 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 显示为存档。本质上,这种行为是正确的,但如果我可以从存档中删除“_”文件夹的最后一步,那将是完美的。我将提出一个更新的问题以减少混淆。
【问题讨论】:
-
你为什么不能只是
tar.extractall(path=destination),其中tar来自tarfile.open(FolderB_path) -
如果我是这个 .tar.gz 的唯一消费者,我当然可以这样做,但我正在创建一个 .tar.gz 供其他人使用,它需要具有特定的结构。