我想通过(Python)创建一个解压缩(.tar.gz)文件的脚本

问题描述 投票:30回答:3

我正在尝试制作一个脚本,用于从一个目录中的文件夹中解压缩所有.tar.gz文件。例如,我将调用一个文件(testing.tar.gz)。然后如果我手动操作,我可以按“提取”,然后.tar.gz文件将创建一个新文件,并调用testing.tar。最后,如果我重复按“提取此处”的过程,.tar文件会将所有.pdf文件生成。

我想知道我怎么能这样做,而且我的代码在这里,似乎并不是现实的工作。

import os
import tarfile
import zipfile

def extract_file(path, to_directory='.'):
    if path.endswith('.zip'):
        opener, mode = zipfile.ZipFile, 'r'
    elif path.endswith('.tar.gz') or path.endswith('.tgz'):
        opener, mode = tarfile.open, 'r:gz'
    elif path.endswith('.tar.bz2') or path.endswith('.tbz'):
        opener, mode = tarfile.open, 'r:bz2'
    else: 
        raise ValueError, "Could not extract `%s` as no appropriate extractor is found" % path

    cwd = os.getcwd()
    os.chdir(to_directory)

    try:
        file = opener(path, mode)
        try: file.extractall()
        finally: file.close()
    finally:
        os.chdir(cwd)
python tar unzip gz
3个回答
51
投票

当你可以轻松地执行一次时,为什么要“按”两次以提取.tar.gz?这是一个简单的代码,可以一次性提取.tar和.tar.gz:

import tarfile
if (fname.endswith("tar.gz")):
    tar = tarfile.open(fname, "r:gz")
    tar.extractall()
    tar.close()
elif (fname.endswith("tar")):
    tar = tarfile.open(fname, "r:")
    tar.extractall()
    tar.close()

1
投票

这是一个更简单的选项:

import envoy # pip install envoy

def tar_xzf(f):
   r = envoy.run("tar xzf %s -C %s" % (f, "directory"))

0
投票

当我运行你的程序时,它完全适用于tar.gz和.tgz文件,当我打开zip时它没有给我正确的项目,但.tbz是唯一一个引发错误的文件。我认为您使用了错误的方法解压缩.tbz,因为错误说我的文件类型不正确,但我没有。解决.zip问题的一种方法是使用os.command()并使用命令行解压缩(取决于你的操作系统)因为它返回了一个_MACOSX文件夹,里面没有任何内容,即使我正确输入了路径。我遇到的唯一其他错误是您使用了不正确的语法来引发错误。 这是你应该使用的:

raise ValueError("Error message here")

您使用了逗号而没有括号。希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.