0

python 代码遍历一个简单文档的段落(7 行“第 1 行”、“第 2 行”等)。我希望每个段落对象都是唯一的,但实际上我得到了重复,在这种情况下0x25173368。怎么了?这完全违背我的直觉。

编码:

import win32com.client as win32

word = win32.GetObject(Class="Word.Application")
doc = word.Documents.Open("test.docx")

for para in doc.Paragraphs:
  print repr(para)

输出:

<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25173368>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25427240>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25173368>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25427280>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25173368>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25427320>
<win32com.gen_py.Microsoft Word 12.0 Object Library.Paragraph instance at 0x25173368>
4

1 回答 1

0

迭代doc.Paragraphs可能会动态地为每个底层 COM 对象创建一个 Python 包装器对象。由于您不存储para任何地方,因此包装对象在超出范围时会被销毁,并且下一次迭代可能会在相同的内存地址处创建一个新对象。

试试这个,看看结果是否不同:

paras = list(doc.Paragraphs)
for para in paras:
    print repr(para)
于 2014-01-22T12:30:03.223 回答