Python: ¿Obtener archivos en un archivo sin el directorio?

He estado aprendiendo python durante aproximadamente 3 semanas, y actualmente estoy tratando de escribir un pequeño script para ordenar archivos (alrededor de 10,000) por palabras clave y fecha que aparece en el nombre del archivo. Los archivos anteriores a una fecha determinada deben agregarse a un archivo. La clasificación funciona bien, pero no el archivo.

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

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

A continuación se muestra un fragmento con mi función zip, node es la ruta donde se encontraban los archivos antes de ordenar, folder es una subcarpeta con los archivos ordenados por una palabra clave en el nombre, los items son las carpetas con 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 cualquier sugerencia y mejoras.

De la ayuda (zipfile):

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

Así que intenta cambiar tu llamada de write () con:

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

Sobre su código, me parece lo suficientemente bueno, especialmente para un pythonista de 3 semanas, aunque algunos comentarios hubieran sido bienvenidos 😉