Почему извлеченный файл .tgz не распаковывается в созданный каталог - PullRequest
0 голосов
/ 20 июня 2011

Не могу на всю жизнь понять, почему выбранные файлы .tgz не извлекаются в каталог, который создает пользователь.Когда я играю с одной строкой кода (внутри последней попытки stmnt), он извлекает в каталог, в котором находится файл .tgz:

 extract(chosen)

Но когда я добавляю путь, он не извлекает:

 extract(chosen, selectDir)

Заранее спасибо.Ниже приведен код:

 def do_fileExtract(self, line):
   defaultFolder = "Extracted"
   if not defaultFolder.endswith(':') and not os.path.exists('c:\\Extracted'):
       os.mkdir('c:\\Extracted')
       raw_input("PLACE .tgz FILES in c:\Extracted AT THIS TIME!!! PRESS ENTER WHEN FINISHED!")
   else:
       pass

   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)
   os.chdir(directory)
   path=os.getcwd() #Set log path here
   dirlist=os.listdir(path)


   files = [fname for fname in os.listdir(path) 
                  if fname.endswith(('.tgz','.tar'))]

   for item in enumerate(files):
       print "%d- %s" % item

   try:
       idx = int(raw_input("\nEnter the file's number:\n"))
   except ValueError:
       print "You fail at typing numbers."

   try:
       chosen = files[idx]
   except IndexError:
       print "Try a number in range next time."


   newDir = raw_input('\nEnter a name to create a folder a the c: root directory:\n')
   selectDir = os.path.join("c:\\", newDir)
   if not newDir.endswith(':') and not os.path.exists(selectDir):
      os.mkdir(selectDir)


   try:

       extract(chosen, selectDir)
       print 'Done'
   except:
       name = os.path.basename(sys.argv[0])
       print name[:name.rfind('.')], '<filename>'
...