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

docx で import * を使用したため、関数「replace」と辞書「replace」があります。これは通訳者を混乱させます。代わりに、"import docx" を使用してから docx.replace(...) を使用するか、"replace" 辞書の名前を別の名前に変更してください。最初のオプションをお勧めします。これにより、将来同様の名前の衝突が回避されます。

于 2012-08-20T08:22:07.650 に答える
1

あいまいさの問題です。コードで使用される「置換」には、関数呼び出しとして使用されるものと、独自に定義された辞書の名前として使用されるものとの 2 つのタイプがあります。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 に答える