¿Cómo puedo cambiar el nombre de los archivos con un script de Python?

En mi sitio plone tengo cientos de archivos (pdf, doc, ...) en el campo de archivos de objetos arquetipos. Algo salió mal durante la importación y faltan todos los nombres de archivo. El problema es que cuando alguien quiere abrir el archivo, ya que falta la extensión, el navegador no siempre propone abrirlo con un visor.

El usuario debe guardar el archivo y agregar una extensión para abrirlo.

¿Puedo escribir una secuencia de comandos de Python para cambiar el nombre de todos los archivos con una extensión según el tipo de archivo?

Gracias por su atención.

preguntado el 08 de noviembre de 11 a las 13:11

Solo una nota al margen, los navegadores generalmente (o principalmente) usan encabezados para determinar qué hacer con el recurso. Por lo tanto, tener la extensión correcta puede que no ayude. Aunque podría usarlo para configurar los encabezados correctos. -

2 Respuestas

http://plone.org/documentation/manual/plone-community-developer-documentation/content/rename

tienes todo lo que necesitas aquí :)

La parte importante es esta: parent.manage_renameObject (id, id + "-old")

puede recorrer los subobjetos haciendo:

for i in context.objectIds():
 obj = context[i]
 context.manage_renameObject(i, i + ".pdf")

el contexto es la carpeta donde pones este script, la carpeta donde tienes todos tus archivos PDF

respondido 08 nov., 11:17

creo que puede llevar algo de tiempo en cientos de archivos. También debe encontrar una manera de entender si es un documento o un pdf. - Yuri

Parece que cambia el nombre de la identificación de mis objetos de archivo, pero no el nombre de archivo en sí. Mi nombre de archivo permanece vacío. - user1035648

el nombre del archivo debe tomar el nombre de la identificación del objeto. Aquí: api.plone.org/Plone/2.1.1/public/… hay un método llamado setFilename. Creo que debes usar un método externo o una vista del navegador para llamarlo. Busque Archetypes / BaseUnit.py, hay un atributo en el campo llamado "nombre de archivo" que lleva el nombre. setFilename se llama cuando procesa la entrada, es decir, cuando guarda el archivo. - Yuri

La función de biblioteca estándar os.rename(src, dst) hará el truco. Eso es todo lo que necesita si sabe cuál debe ser la extensión (por ejemplo, todos los archivos son .pdf). Si tiene una mezcla de archivos .doc, .pdf, .jpg, .xls sin extensiones, deberá examinar el contenido del archivo para determinar la extensión adecuada utilizando algo como pitón-magia.

import os

for fn in os.listdir(path='.'):
    os.rename(fn, fn + ".pdf")

respondido 08 nov., 11:18

Estos no son archivos del sistema de archivos, sino objetos de archivo en un sitio Plone. :-) - Martijn Pieters

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.