python - TypeError:'dict'对象不可调用

时间:2012-08-20 08:17:10

标签: python typeerror docx python-docx

我使用的是python库docx:http://github.com/mikemaccana/python-docx

我的目标是打开一个文件,替换某些单词,然后用替换文件写入该文件。

我目前的代码:

#! /usr/bin/python

from docx import *

openDoc = "test.docx"
writeDoc = "test2.docx"
replace = {"Test":"TEST"}

document = opendocx(openDoc)
docbody = document.xpath('/w:document/w:body', namespaces=nsprefixes)[0]

print getdocumenttext(document)

for key in replace:
    if search(docbody, key):
        print "Found" , key , "replacing with" , replace[key]
        docbody = replace(docbody,key,replace[key])

print getdocumenttext(document)

# ideally just want to mirror current document details here..
relationships = relationshiplist()
coreprops = coreproperties(title='',subject='',creator='',keywords=[])

savedocx(document,coreprops,appproperties(),contenttypes(),websettings(),wordrelationships(relationships),'a.docx')

` 但是我收到以下错误:

Traceback (most recent call last):
  File "process.py", line 17, in <module>
    docbody = replace(docbody,key,replace[key])
TypeError: 'dict' object is not callable

我不知道为什么会这样,但我认为它与docx模块有关。任何人都可以解释为什么会这样吗?

由于

3 个答案:

答案 0 :(得分:8)

您已将replace分配到最顶层的字典:

replace = {"Test":"TEST"}

所以你不能使用replace()方法,因为单词replace现在指向一个字典 - 而不是我怀疑你的库中的某些方法。

重命名字典,它应该有用。

答案 1 :(得分:1)

这是一个含糊不清的问题,你的代码中使用了两种类型的“替换”,作为函数调用,另一种作为你自己定义的字典的名称,python解释器正在解释替换的类型是一个字典,所以你不能将它用作函数调用,尝试更改替换字典的名称,看看它是否已解决:

for key in replace:
    if search(docbody, key):
        print "Found" , key , "replacing with" , replace[key]
        docbody = **replace**(docbody,key,**replace**[key])

答案 2 :(得分:1)

你使用import *和docx,所以你有一个函数“replace”和一个字典“replace”。这使翻译感到困惑。相反,使用“import docx”然后使用docx.replace(...),或将“replace”字典重命名为其他字典。我建议使用第一个选项,因为这样可以避免将来出现类似的命名冲突。