有人可以解释和帮助我解决为什么我的函数停止提取.tgz文件时,我添加了一个计数器来创建不同名称的文件夹,以防止我在同一目录中提取另一个.tgz文件时覆盖以前提取的文件夹?我做错了什么?谢谢!下面是两个函数...第一个函数正确地解压文件;第二个函数解压一个带编号的文件夹并退出。
作品:
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('/')])不起作用:
global counter
counter=1
def extract(tar_url, extract_path='.'):
global counter
print tar_url
tar = tarfile.open(tar_url, 'wb')# changed from r to wb 6/12
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('/')])下面是我在main中调用它的方式(我使用easygui):
direct = diropenbox(msg="Choose path to place extracted files!", title='SQA Extractor', default='c:\\Extracted')
msg = "Are you sure you want to extract?"
title = "Confirm"
os.chdir(direct)
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)) 发布于 2011-06-14 01:31:18
也许就是这个改变破坏了你的代码:
tar = tarfile.open(tar_url, 'r')更改为:
tar = tarfile.open(tar_url, 'wb')# changed from r to wb 6/12发布于 2011-06-14 01:33:35
包含计数器的解压缩路径是否存在?
for item in tar:
os.mkdir(extract_path + "_%d" % counter)
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('/')])发布于 2011-06-14 01:59:18
原始版本依赖于创建的文件夹名称,这些文件夹名称与存档中指定的相对路径匹配。在新版本中,递归调用在将该级别的其他文件提取到有标签编号的文件夹中后,尝试将文件放入没有'tag‘编号的文件夹中。
尝试将标记添加到用于递归调用的路径名中。
顺便说一句,item.name.find(".tar") != -1的Python惯用拼写是'.tar' in item.name。
https://stackoverflow.com/questions/6333931
复制相似问题