2

我正在使用 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 模块有关。谁能解释为什么会这样?

谢谢

4

3 回答 3

8

您分配replace给最顶部的字典:

replace = {"Test":"TEST"}

所以你不能使用这个replace()方法,因为这个词replace现在指向一个字典——而不是我怀疑是你图书馆的一些方法。

重命名您的字典,它应该可以工作。

于 2012-08-20T08:20:48.480 回答
1

这是一个模棱两可的问题,您的代码中使用了两种类型的“替换”,作为函数调用,另一种作为您自己定义的字典的名称,python 解释器将替换的类型解释为字典因此您不能将其用作函数调用,请尝试更改替换字典的名称以查看是否已解决:

for key in replace:
    if search(docbody, key):
        print "Found" , key , "replacing with" , replace[key]
        docbody = **replace**(docbody,key,**replace**[key])
于 2012-08-20T08:21:45.683 回答
1

您将 import * 与 docx 一起使用,因此您有一个函数“replace”和一个字典“replace”。这使解释器感到困惑。相反,使用“import docx”,然后使用 docx.replace(...),或者将“replace”字典重命名为其他名称。我推荐第一个选项,因为这样可以避免将来出现类似的命名冲突。

于 2012-08-20T08:22:07.650 回答