首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么提取函数停止提取?

为什么提取函数停止提取?
EN

Stack Overflow用户
提问于 2011-06-14 01:28:28
回答 3查看 147关注 0票数 0

有人可以解释和帮助我解决为什么我的函数停止提取.tgz文件时,我添加了一个计数器来创建不同名称的文件夹,以防止我在同一目录中提取另一个.tgz文件时覆盖以前提取的文件夹?我做错了什么?谢谢!下面是两个函数...第一个函数正确地解压文件;第二个函数解压一个带编号的文件夹并退出。

作品:

代码语言:javascript
复制
 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('/')])

不起作用:

代码语言:javascript
复制
 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):

代码语言:javascript
复制
  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))      
EN

回答 3

Stack Overflow用户

发布于 2011-06-14 01:31:18

也许就是这个改变破坏了你的代码:

代码语言:javascript
复制
tar = tarfile.open(tar_url, 'r')

更改为:

代码语言:javascript
复制
tar = tarfile.open(tar_url, 'wb')# changed from r to wb 6/12
票数 1
EN

Stack Overflow用户

发布于 2011-06-14 01:33:35

包含计数器的解压缩路径是否存在?

代码语言:javascript
复制
  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('/')])
票数 0
EN

Stack Overflow用户

发布于 2011-06-14 01:59:18

原始版本依赖于创建的文件夹名称,这些文件夹名称与存档中指定的相对路径匹配。在新版本中,递归调用在将该级别的其他文件提取到有标签编号的文件夹中后,尝试将文件放入没有'tag‘编号的文件夹中。

尝试将标记添加到用于递归调用的路径名中。

顺便说一句,item.name.find(".tar") != -1的Python惯用拼写是'.tar' in item.name

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6333931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档