Как я могу переименовывать файлы с помощью скрипта python?

#python #plone #filenames #archetypes #filefield

#python #plone #имена файлов #архетипы #filefield

Вопрос:

На моем сайте plone у меня есть сотни файлов (pdf, doc, …) в filefield объектов archetypes. Что-то пошло не так во время импорта, и все имена файлов отсутствуют. Проблема в том, что когда кто-то хочет открыть файл, поскольку расширение отсутствует, браузер не всегда предлагает открыть его с помощью программы просмотра.

Пользователь должен сохранить файл и добавить расширение, чтобы открыть его.

Могу ли я написать скрипт на python для переименования всех файлов с расширением в зависимости от типа файла?

Спасибо.

Комментарии:

1. Просто примечание, браузеры обычно (или в первую очередь) используют заголовки, чтобы определить, что делать с ресурсом. Поэтому правильное расширение может не помочь. Хотя, возможно, plone мог бы использовать его для установки правильных заголовков.

Ответ №1:

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

здесь есть все, что вам нужно 🙂

Важная часть заключается в следующем: parent.manage_renameObject(идентификатор, id «-old»)

вы можете перебирать подобъекты, выполняя:

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

контекст — это папка, в которую вы помещаете этот скрипт, папка, в которой у вас все ваши PDF-файлы

Комментарии:

1. я думаю, это может занять некоторое время для сотен файлов. Вы также должны найти способ понять, является ли это документом doc или pdf.

2. Кажется, что он переименовывает идентификатор моих файловых объектов, но не само имя файла. Мое имя файла остается пустым.

3. имя файла должно быть взято из идентификатора объекта. Здесь: api.plone.org/Plone/2.1.1/public / … существует метод, называемый setFilename . Я думаю, вы должны использовать внешний метод или представление браузера, чтобы вызвать его. Поиск Archetypes/BaseUnit.py в поле с именем «filename» есть атрибут, который содержит имя. setFilename вызывается при обработке входных данных, то есть при сохранении файла.

Ответ №2:

Стандартная библиотечная функция os.rename(src, dst) сделает свое дело. Это все, что вам нужно, если вы знаете, каким должно быть расширение (например, все файлы .pdf). Если у вас есть смешанный пакет файлов .doc, .pdf, .jpg, .xls без расширений, вам нужно изучить содержимое файла, чтобы определить правильное расширение, используя что-то вроде python-magic.

 import os

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

Комментарии:

1. Это не файлы файловой системы, а файловые объекты на сайте Plone. 🙂