使用plone.api编写Python脚本以创建文件设置文件时出现错误类型
亲爱的 我正在创建一个python脚本来在Plone站点中批量上传文件,安装是UnifiedInstaller Plone 4.3.10 此脚本读取一个txt,此txt用分号分隔,在新创建的项目中设置文件时会出现错误 大声喊剧本使用plone.api编写Python脚本以创建文件设置文件时出现错误类型,python,file,plone,Python,File,Plone,亲爱的 我正在创建一个python脚本来在Plone站点中批量上传文件,安装是UnifiedInstaller Plone 4.3.10 此脚本读取一个txt,此txt用分号分隔,在新创建的项目中设置文件时会出现错误 大声喊剧本 from zope.site.hooks import setSite from plone.namedfile.file import NamedBlobFile from plone import api import transaction import csv
from zope.site.hooks import setSite
from plone.namedfile.file import NamedBlobFile
from plone import api
import transaction
import csv
portal = app['Plone']
setSite(portal)
container = portal['PROCESSOS']
with open('CARGA/C008_0002.txt', 'rb') as csvfile:
reader = csv.DictReader(csvfile, delimiter=';', quotechar='|')
for row in reader:
pdf_id = 'P'+str(row['IMAGEM']).strip('Pasta Geral\\ ')
file_obj = api.content.create(
container, 'File',
title=str(row['INTERESSADO']),
id=pdf_id,
description=str(row['CNPJ / CPF'])+' '+str(row['ASSUNTO']),
safe_id=True
)
pdf_path = 'INMEQ/'+str(row['IMAGEM']).replace("\\", "/")
print(pdf_path)
file_obj.file = NamedBlobFile(
data=open(pdf_path, 'r').read(),
contentType='application/pdf',
filename=str(file_obj.id),
)
print('Created: '+row['NDOPROCESSO']+'.')
transaction.commit()
脚本将设置文件时,会出现错误“错误类型”。见下面详细的咆哮
Traceback (most recent call last):
File "<console>", line 18, in <module>
File "/home/jaf/plone4310/buildout-cache/eggs/plone.namedfile-3.0.9-py2.7.egg/plone/namedfile/file.py", line 384, in __init__
self.filename = filename
File "/home/jaf/plone4310/buildout-cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/fieldproperty.py", line 52, in __set__
field.validate(value)
File "/home/jaf/plone4310/buildout-cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/_bootstrapfields.py", line 182, in validate
self._validate(value)
File "/home/jaf/plone4310/buildout-cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/_bootstrapfields.py", line 309, in _validate
super(MinMaxLen, self)._validate(value)
File "/home/jaf/plone4310/buildout-cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/_bootstrapfields.py", line 209, in _validate
raise WrongType(value, self._type, self.__name__)
WrongType: ('processo-al-1.pdf', <type 'unicode'>, 'filename')
回溯(最近一次呼叫最后一次):
文件“”,第18行,在
文件“/home/jaf/plone4310/buildout cache/eggs/plone.namedfile-3.0.9-py2.7.egg/plone/namedfile/File.py”,第384行,在__
self.filename=文件名
文件“/home/jaf/plone4310/buildout cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/fieldproperty.py”,第52行,在__
字段。验证(值)
文件“/home/jaf/plone4310/buildout cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/_bootstrapfields.py”,验证中第182行
自我验证(值)
文件“/home/jaf/plone4310/buildout cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/_bootstrapfields.py”,第309行,在
超级(MinMaxLen,self)。\u验证(值)
文件“/home/jaf/plone4310/buildout cache/eggs/zope.schema-4.2.2-py2.7.egg/zope/schema/_bootstrapfields.py”,第209行,在
引发错误类型(值、自我类型、自我名称)
错误类型:('processo-al-1.pdf','filename')
谢谢你的关注
--
Juliano Araújo您需要以unicode格式传递文件名
file_obj.file = NamedBlobFile(
data=open(pdf_path, 'r').read(),
contentType='application/pdf',
filename=unicode(file_obj.id), # needs to be unicode
)
更多信息请访问plone.namedfile docu-->Mathias,我做到了,而且成功了。我只是把filename=unicode(file_obj.id,“utf-8”)。非常感谢你@朱利亚诺拉奥:太好了,你可能想接受这个答案:——)