gpt4 book ai didi

python - 我想将所有 .tgz 和 .tar 文件提取到一个目录中

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:59 24 4
gpt4 key购买 nike

我正在使用以下代码将 .tgz 和 .tar 文件提取到存档文件所在的同一目录中。它适用于单个文件。但是,当我选择同一目录中的另一个文件进行提取时,当前文件夹将被覆盖(所有文件都提取一个名为 storage 的根文件夹)。我想这就是文件被覆盖的原因。所以,我在任何时候只能在目录中有一个提取的文件。我试图想出一种聪明的方法来将文件提取到同一目录中,也许在提取后将提取的文件命名为唯一的名称。但是,我是一名新手 Python 程序员,目前不具备完成此类任务的技术知识或知识工具集。任何帮助表示赞赏。就目前而言,每次我想提取文件时都必须选择不同的输出目录。

 import os, sys, tarfile



def extract(tar_url, extract_path='.'):
print tar_url
tar = tarfile.open(tar_url, 'r')
for item in tar:
tar.extract(item, extract_path)
if item.name.find(".tgz") != -1 or item.name.find(".tar") != -1:
extract(item.name, "./" + item.name[:item.name.rfind('/')])

userpath = "Extracted"
directory = os.path.join("c:\\", userpath)
try:
for root, dirname, files in os.walk(directory):
for file1 in files:
if file1.endswith(".tgz") or file1.endswith(".tar"):
extract(os.path.join(root, file1))
print 'Done!'
except:
name = os.path.basename(sys.argv[0])
print name[:name.rfind('.')], '<filename>'

最佳答案

为什么不维护一个全局计数器,并在每次提取文件时将其附加到 extract() 方法中的“extract_path”?一旦提取(在 extract() 方法的末尾)增加计数器。

import os, sys, tarfile

global counter
counter=1

def extract(tar_url, extract_path='.'):
global counter
print tar_url
tar = tarfile.open(tar_url, 'r')
for item in tar:
tar.extract(item, extract_path+"_%d"%counter)
counter+=1
if item.name.find(".tgz") != -1 or item.name.find(".tar") != -1:
extract(item.name, "./" + item.name[:item.name.rfind('/')])

关于python - 我想将所有 .tgz 和 .tar 文件提取到一个目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6310794/

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