使用plone.api编写Python脚本以创建文件设置文件时出现错误类型

使用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

亲爱的

我正在创建一个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

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”)。非常感谢你@朱利亚诺拉奥:太好了,你可能想接受这个答案:——)