如何遍历目录并解压缩tar.gz文件?

时间:2015-05-18 01:08:20

标签: python python-3.x

我有许多包含...tar.gz的子目录 文件。我正在尝试使用os.walk()浏览单个文件并使用tarfile模块解压缩它们。

import os
import tarfile

current_wkd = os.getcwd()

output_dir = '.../Tar_unzip/output'

for dirpath, dir, files in os.walk(top=current_wkd):
    #print(files) produces
    #alpha.tar.gz
    #beta.tar.gz
    #...etc
    for file in files:
        tar = tarfile.open(file)   #this line produces an error:'file cannot be opened' 
        tar.extractall(path=output)
        tar.close() 

我正在尝试遍历不同的目录并提取..tar.gz文件。我也尝试过使用:

...
for file in files:
if file.endswith('.gz'):  #find files that end with .gz 
    #some folders contain other files
    #that may result in an error? 
    tar = tarfile.open(file)
    tar.extractall(path=output_dir)

我真的很感兴趣是否可以使用python来移动目录(迭代)并执行某些功能,例如解压缩文件等。

非常感谢任何帮助。我是Python的新手。谢谢。

1 个答案:

答案 0 :(得分:1)

正如os.walk文档中所述:

  

请注意,列表中的名称不包含路径组件。要获取 dirpath 中的文件或目录的完整路径(以top开头),请执行SELECT DISTINCT thisID, thisNAME from table1 WHERE thisID IN (SELECT id from table2 WHERE ... conditions) OR thisID IN (SELECT id from table3 WHERE ... different conditions) OR thisID IN (SELECT id from table99 WHERE ...even more conditions);

当然,你自己也看到了,打印出os.path.join(dirpath, name)等,这显然不是当前工作目录中的绝对路径名或相对路径名,也不是你可以访问的任何其他东西,只是裸文件名。

另请注意,文档中给出的每个示例都完全符合建议。例如:

alpha.tar.gz

所以,在你的情况下:

import os
for root, dirs, files in os.walk(top, topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))

还有一件事:

for dirpath, dir, files in os.walk(top=current_wkd):
    for file in files:
        tar = tarfile.open(os.path.join(dirpath, file))
        tar.extractall(path=output)
        tar.close()

这几乎肯定会导致错误。首先,output_dir = '.../Tar_unzip/output' output的名称不同。另一方面,output_dir并不意味着什么;你可能想要...