2015-10-25 2 views
2

Я пытаюсь использовать shutils.py, make_archive функция.
здесь: https://docs.python.org/2/library/shutil.html#archiving-operations
но я не могу понять разницу между root_dir и base_dir.
Вот простой код с помощью make_archive:В чем разница между корневым и базовым каталогом?

#!user/bin/python 
from os import path 
from os import curdir 
from shutil import make_archive 
# Setting current Directory 
current = path.realpath(curdir) 
# Now Compressing 
make_archive("Backup", "gztar", current) 

Это создаст архив с именем backup.tar.gz, который содержит а. Справочник внутри. Я не хочу. но все это внутри архива.

ответ

2

root_dir ссылается на базовый каталог выходного файла или рабочий каталог для вашего рабочего скрипта.

base_dir относится к содержимому, которое вы хотите упаковать.

К примеру, если у вас есть дерево, как:

/home/apast/git/someproject 

И вы хотите, чтобы сделать пакет для папки someproject, вы можете установить:

root_dir="/home/apast/git" 
base_dir="someproject" 

Если содержимое вашего дерева как следующий, пример: /home/apast/git/someproject/test.py /home/apast/git/someproject/model.py

содержание вашего пакета Виль л приобретают следующую структуру:

someproject/test.py someproject/model.py

И ваш файл пакета будет храниться по адресу:

/home/apast/git/<packfile-name> 

Как показывает DOC, по умолчанию, ROOT_DIR и base_dir инициализируются для вашего текущего рабочего каталога (cwd или curdir). Но вы можете использовать его более гибким способом.

+0

Большое спасибо! любой совет о том, как получить весь каталог? – Heartagramir

+0

Я исправил свое описание. эти параметры относятся к выходу. Извините, я считаю, что я начал с неправильного решения. Я исправлю это, чтобы очистить вещи – apast

+0

Какой каталог вы хотите? Можете ли вы лучше показать ожидаемый результат? – apast

1

Это немного запутанно, если вы читаете документацию, но если вы видите ее визуально, это может помочь совсем немного.

root_dir каталог, который вы будете хранить файл в.

Если бы я хранить файл в C:\Users\Elipzer\Desktop\MyFolder\, что бы мой root_dir.

base_dir является частью добавляется на root_dir так, если бы я хранить его под MyFolder в ...\MyFolder\MySubFolder\, я бы поставил, что в качестве base_dir.

Во многих случаях нет необходимости использовать эти, так как вы можете просто изменить каталог по умолчанию каталог, в котором вы хотите сохранить файл в и функции make_archive будет просто использовать каталог по умолчанию, как root_dir и base_dir.

1

Рассмотрим следующие дир структуры:

/home/apast/git/web/tornado.py 
/home/apast/git/web/setup.py 

/home/apast/git/core/service.py 

/home/apast/git/mobile/gui.py 
/home/apast/git/mobile/restfulapi.py 

Мы постараемся два фрагмента, чтобы уточнить примеры: 1. Определение base_dir 2. Без определенного base_dir

  1. Определение base_dir, мы указать, какие мы будем включать в наш файл:

    from shutil import make_archive 
    root_dir = "/home/apast/git/" 
    
    make_archive(base_name="/tmp/outputfile", 
          format="gztar", 
          root_dir=root_dir, 
          base_dir="web") 
    

    Этот код будет генерировать файл с именем /tmp/outputfile.tar.gz со следующей структуры:

    web/tornado.py 
    web/setup.py 
    
  2. Запуск без base_dir, как следующее:

    from shutil import make_archive 
    
    root_dir = "/home/apast/git/" 
    
    make_archive(base_name="/tmp/outputfile", 
          format="gztar", 
          root_dir=root_dir) 
    

    Это будет продукт файл, содержащий:

    web/tornado.py 
    web/setup.py 
    core/service.py 
    mobile/gui.py 
    mobile/restfulapi.py 
    

Для определения конкретных папок, возможно, будет необходимо использовать другой метод, например gzip lib.

+0

хорошо, я думаю, что вам нужно gzip lib прямо, как вы говорите. использование без base_dir создаст каталог, такой как: /. =>/web/mobile – Heartagramir

+0

Да. Он имеет несколько простой способ. В противном случае, shutils - отличная библиотека для работы с операциями os. Давайте попробуем что-нибудь с другими библиотеками – apast

+1

Эй! Здесь есть хорошее решение для вашей проблемы! https://docs.python.org/2/library/tarfile.html#tarfile.TarFile.add и https://docs.python.org/2/library/tarfile.html#tarfile.TarFile.addfile. Надеюсь, это поможет вам! – apast

0

cd in the root_dir ... затем tar base_dir ... Документы заставляют меня смущать, прочитайте код, который сделает очистку.