我使用的是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模块有关。任何人都可以解释为什么会这样吗?
由于
答案 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”字典重命名为其他字典。我建议使用第一个选项,因为这样可以避免将来出现类似的命名冲突。