2011-01-20 18 views
5

Hice una pequeña secuencia de comandos como la siguiente para leer el grupo de archivos y tar them, todo está bien, acepte que el archivo comprimido contiene la ruta completa de los archivos cuando se descomprime. ¿Hay alguna forma de hacerlo sin la estructura del directorio?python tarfile sin ruta completa

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

Respuesta

7

Tome un vistazo a la TarFile.add firma:

... si se da, arcname especifica un nombre alternativo para el archivo en el archivo.

2

Creé un administrador de contexto para cambiar el directorio de trabajo actual para manejar esto con los archivos tar.

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

Entonces, para envasar todo para arriba en su caso:

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

gracias, agradezco su ayuda en esto. Funcionó, publiqué otra pregunta antes y te ves como el hombre para ayudar en la otra pregunta también http://stackoverflow.com/questions/4725685/django-auto-filling-some-data-based-on-model- atribuir muchas gracias –

Cuestiones relacionadas