2011-08-10 22 views
10

He estado aprendiendo Python durante aproximadamente 3 semanas, y actualmente estoy tratando de escribir un pequeño script para clasificar archivos (aproximadamente 10.000) por palabras clave y la fecha aparece en el nombre del archivo. Los archivos antes de una fecha determinada se deben agregar a un archivo. La clasificación funciona bien, pero no el archivoPython: ¿Cómo obtener archivos en un archivo sin el directorio?

Crea un archivo - el nombre está bien - pero en el archivo está la ruta completa a los archivos. Si lo abro, se ve así: folder1 -> folder2 -> folder3 -> files.

¿Cómo puedo cambiarlo de modo que el archivo solo contenga los archivos y no toda la estructura?

A continuación se muestra un fragmento con mi función postal, node es la ruta donde los archivos estaban antes de la clasificación, folder es una subcarpeta con los archivos ordenados por una palabra clave en el nombre, items son las carpetas con los archivos ordenados por fecha.

estoy usando Python 2,6

def ZipFolder(node, zipdate): 
    xynode = node + '/xy' 
    yznode = node + '/yz' 
    for folder in [xynode,yznode]: 
     items = os.listdir(folder) 
     for item in items: 
      itemdate = re.findall('(?<=_)\d\d\d\d-\d\d', item) 
      print item 
      if itemdate[0] <= zipdate: 
       arcname = str(item) + '.zip' 
       x = zipfile.ZipFile(folder + '/' + arcname, mode='w', compression = zipfile.ZIP_DEFLATED) 
       files = os.listdir(folder + '/' + item) 
       for f in files: 
        x.write(folder + '/' + item + '/' + f) 
        print 'writing ' + str(folder + '/' + item + '/' + f) + ' in ' + str(item) 
       x.close() 
       shutil.rmtree(folder + '/' + item) 
    return 

También estoy abierto a todas las sugerencias y mejoras.

Respuesta

13

De ayuda (archivo zip):

| write(self, filename, arcname=None, compress_type=None) 
|  Put the bytes from filename into the archive under the name 
|  arcname. 

Así que trate de cambiar su escritura() con:

x.write(folder + '/' + item + '/' + f, arcname = f) 

información sobre su código, me parece bastante bueno, especialmente para un 3 semanas de Pythonist, aunque algunos comentarios habrían sido bienvenidos ;-)

+0

No hay comentarios, pero docstring. Explica qué hace la función y para qué es útil, no cómo funciona y la docstring es más útil para eso. –

+0

increíble funciona, gracias por la ayuda rápida. – rny

+0

@Jan Hudec: con docstring te refieres a algo así: def ZipFolder (node, zipdate): "" "archivos zip anteriores a 'zipdate' en las subcarpetas de 'node'" "" – rny

Cuestiones relacionadas