2011-11-08 51 views
4

在我的plone站点上,我在原型对象的filefield中有数百个文件(pdf,doc,...)。导入过程中出错,所有文件名都丢失。问题是,当有人想要打开文件时,由于缺少扩展名,浏览器并不总是建议用查看器打开它。如何使用python脚本重命名文件?

用户必须保存文件并添加扩展名才能打开它。

我可以编写一个python脚本来根据文件类型对扩展名进行重命名吗?

谢谢。

+0

只是一个侧面说明,浏览器通常(或主要)使用标题来确定如何处理资源。所以拥有正确的扩展可能没有帮助。虽然它可能会用plone来设置正确的标题。 – rplnt

回答

3

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

你所有你需要在这里:)

最重要的部分是这样的:parent.manage_renameObject(ID,ID + “-old”)

可以循环过子对象做:

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

上下文是你把这个脚本,你到哪儿去所有您的PDF文件夹的文件夹

+0

它可能需要一些时间,我认为,数以百计的文件。您还需要找到一种方法来了解它是文档还是PDF。 – Yuri

+0

它似乎重命名我的文件对象的id,但不是文件名本身。我的文件名保持空白。 – user1035648

+0

文件名应该取自对象ID的名称。这里:http://api.plone.org/Plone/2.1.1/public/Archetypes.Field.FileField-class.html有一个名为setFilename的方法。我认为你必须使用外部方法或浏览器视图来调用它。搜索Archetypes/BaseUnit.py,在名为“filename”的字段中有一个属性,它带有名称。在处理输入时(即保存文件时),会调用setFilename。 – Yuri

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站点中的File对象。 :-) –