相关疑难解决方法(0)

89
推荐指数
5
解决办法
8万
查看次数

如何在 Python/tar 中创建 tar.gz 存档而不包含父目录?

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

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

在最受支持的答案中,人们讨论了删除父目录的方法,但它们都不适合我。我尝试过 arcname、os.walk,并通过 subprocess.call () 运行 tar 命令。

我已经接近 os.walk,但在下面的代码中,它仍然会在文件夹 B 和文件 B 中删除一个“_”目录。所以,文件结构是 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)
Run Code Online (Sandbox Code Playgroud)

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

make_tarfile('ARCHIVE.tar.gz', 'C:\FolderA')
Run Code Online (Sandbox Code Playgroud)

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

更新

这是显示我的存档内容的图像。正如您所看到的,我的存档中有一个“_”文件夹,我想删除它——奇怪的是,当我解压时,只有FolderA和FileB.html显示为已存档。从本质上讲,这种行为是正确的,但如果我可以执行最后一步,从存档中删除“_”文件夹,那就完美了。我将提出一个更新的问题以减少混乱。

python tar

5
推荐指数
2
解决办法
9170
查看次数

Python:将压缩级别分配给tarfile

我的问题是一个跟进这一个。我想知道如何修改以下代码,以便分配压缩级别:

import os
import tarfile

home = '//global//scratch//chamar//parsed_data//batch0'
backup_dir = '//global//scratch//chamar//parsed_data//'

home_dirs = [ name for name in os.listdir(home) if os.path.isdir(os.path.join(home, name)) ]

for directory in home_dirs:
    full_dir = os.path.join(home, directory)
    tar = tarfile.open(os.path.join(backup_dir, directory+'.tar.gz'), 'w:gz')
    tar.add(full_dir, arcname=directory)
    tar.close()
Run Code Online (Sandbox Code Playgroud)

基本上,代码的作用是循环遍历目录中的每个目录batch0并压缩每个目录(每个目录中有6000多个文件),并tar.gz为中的每个目录创建一个压缩文件//global//scratch//chamar//parsed_data//。我认为默认情况下,压缩级别为= 9,但压缩需要大量时间。我不需要太多压缩。5级就足够了。如何修改上面的代码以包含压缩级别?

python compression tar

2
推荐指数
1
解决办法
1393
查看次数

标签 统计

python ×3

compression ×2

tar ×2

tarfile ×1

zip ×1