python代码遍历简单文档的段落(7行“Line 1”,“Line 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>
答案 0 :(得分:0)
doc.Paragraphs
上的迭代可能会动态地为每个底层COM对象创建一个Python包装器对象。由于您没有将para
存储在任何地方,因此当包装器对象超出范围时会被销毁,下一次迭代可能会在同一个内存地址处创建一个新对象。
请尝试使用此功能,看看结果是否不同:
paras = list(doc.Paragraphs)
for para in paras:
print repr(para)