2011-01-20 20 views
5

Ho creato un piccolo script come di seguito per leggere il gruppo di file e tar, il tutto funziona correttamente e accetta che il file compresso contenga il percorso completo dei file quando non compressi. C'è un modo per farlo senza la struttura della directory?tarpile python senza percorso completo

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() 

risposta

7

Date un'occhiata al TarFile.add firma:

... Se dato, arcname specifica un nome alternativo per il file nell'archivio.

2

Ho creato un gestore di contesto per modificare la directory di lavoro corrente per gestirlo con i file tar.

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

Poi, per confezionare tutto in su nel vostro caso:

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

grazie Grant, apprezzo il vostro aiuto in merito. Ha funzionato, ho postato un'altra domanda in precedenza e sembri che l'uomo possa aiutarti anche nell'altra domanda http://stackoverflow.com/questions/4725685/django-auto-filling-some-data-based-on-model- attributo molte grazie –

Problemi correlati