файл Python без полного пути - PullRequest
5 голосов
/ 20 января 2011

Я сделал небольшой скрипт, как показано ниже, для чтения группы файлов и их tar, все работает нормально, если принять, что сжатый файл содержит полный путь к файлам при распаковке.Есть ли способ сделать это без структуры каталогов?

compressor = tarfile.open(PATH_TO_ARCHIVE + re.sub('[\s.:"-]+', '', 
    str(datetime.datetime.now())) + '.tar.gz', 'w:gz')

for file in os.listdir(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT)):
    compressor.add(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT) + file)

compressor.close()

Ответы [ 2 ]

7 голосов
/ 20 января 2011

Взгляните на TarFile.add подпись:

... Если указано, arcname указывает альтернативное имя файла в архиве.

2 голосов
/ 20 января 2011

Я создал менеджер контекста для изменения текущего рабочего каталога для обработки его с помощью файлов tar.

import contextlib
@contextlib.contextmanager
def cd_change(tmp_location):
    cd = os.getcwd()
    os.chdir(tmp_location)
    try:
        yield
    finally:
        os.chdir(cd)

Затем, чтобы упаковать все в вашем случае:

with cd_change(os.path.join(settings.MEDIA_ROOT, PATH_CSS_DB_OUT)):
    for file in os.listdir('.'):
        compressor.add(file)
...