2016-02-19 4 views
0

Я пытаюсь загрузить файл (который может быть одним из tar, tar.gz, bz2 или zip), и перед его загрузкой я хочу проверить, что содержимое tar (или любого сжатого формата) имеет только папку в вершина с именем, которое совпадает с именем переменной 'name'.Как проверить, имеет ли архив только одну папку в python?

В моем коде я могу загрузить файл, но я не могу проверить вышеуказанное условие. Обратите внимание, что getnames() в коде не работает. Как проверить, что есть только одна папка вверху с заданным именем?

Обратите внимание: папки могут не содержать файлов внутри них. Папки могут быть пустыми.

Вот псевдо-код:

with Archive(fileobj=data['zxc']) as archive: 
    if archive.is_archive(): 
     count=0 
     nam="" 
     for a in (get names of folders at the top): 
      nam="" 
      count+=1 
      if count!=1: 
       print "error" 
      elif nam!=name: 
       print "error2" 
      else: 
       print "correct" 
+0

Что такое utils.archives? Это не похоже на стандартную библиотеку python. Где это задокументировано? – Oin

+1

Здесь: https://github.com/django/django/blob/master/django/utils/archive.py – Sam

ответ

0

Документы приводит меня к мысли, что это ваше обращение, но я не думаю, что файлы «» ZXC поддерживается классом архива в Джанго.

def has_leading_dir(self, paths): 
    """ 
    Returns true if all the paths have the same leading path name 
    (i.e., everything is in one subdirectory in an archive) 
    """ 
    common_prefix = None 
    for path in paths: 
     prefix, rest = self.split_leading_dir(path) 
     if not prefix: 
      return False 
     elif common_prefix is None: 
      common_prefix = prefix 
     elif prefix != common_prefix: 
      return False 
    return True 
+0

zxc - это имя переменной, а не имя файла, и оно работает. То, что я задаю в вопросе, заключается в том, как импортировать псевдокод, упомянутый в вопросе в python. – Sam

+0

has_leading_dir может не работать, если в верхней части есть дополнительная папка без содержимого – Sam

 Смежные вопросы

  • Нет связанных вопросов^_^