Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python解析许多word文档_Python_Windows_Ms Word - Fatal编程技术网

Python解析许多word文档

Python解析许多word文档,python,windows,ms-word,Python,Windows,Ms Word,我写了一个小程序,从word文档中提取数据并进行处理。该工具仅在Windows(XP)上运行,并使用PyWin32库 一切正常,但有时我有以下问题,这是相当烦人的用户 1) 我使用此代码隐藏Word,但有时Word会打开并打开所有文档。这种情况非常不可靠,我也不知道为什么会发生这种情况。有人注意到同样的问题吗 word = win32.gencache.EnsureDispatch('Word.Application') word.Visible = False 2) 在程序被数百个文档多次使

我写了一个小程序,从word文档中提取数据并进行处理。该工具仅在Windows(XP)上运行,并使用PyWin32库

一切正常,但有时我有以下问题,这是相当烦人的用户

1) 我使用此代码隐藏Word,但有时Word会打开并打开所有文档。这种情况非常不可靠,我也不知道为什么会发生这种情况。有人注意到同样的问题吗

word = win32.gencache.EnsureDispatch('Word.Application')
word.Visible = False
2) 在程序被数百个文档多次使用后,由于RAM不足,程序崩溃。有人对我如何处理这个问题有什么建议吗

编辑:我加载的文件如下:

def convert_word_to_text(path, id):
"""Converts the word documents in text format."""

    word.Documents.Open(path)
    doc = word.ActiveDocument
    table = doc.Tables(1)
    # Process the data

for file in files:
    convert_word_to_text(file, id)
doc.close()
非常感谢您的帮助!
对于第(2)项,我猜您正在将许多文件加载到内存中,然后对它们进行处理。相反,您应该使用生成器或for循环,分别加载每个文件,提取文本/任何内容,然后转到下一个文件。在加载外部XML或二进制ish文件(例如,带有
PIL
的图像、带有
openpyxl
的excel文件等)时,似乎经常会出现这种问题。

对于(2),我猜您正在将大量文件加载到内存中,然后对它们进行处理。相反,您应该使用生成器或for循环,分别加载每个文件,提取文本/任何内容,然后转到下一个文件。在加载外部XML或二进制ish文件(例如,带有
PIL
的图像、带有
openpyxl
的excel文件等)时,似乎经常会出现此类问题。

因为您打开了一个文档:

word.Documents.Open(path)
doc
你也应该关闭它。大概是这样的:

def convert_word_to_text(path, id):
"""Converts the word documents in text format."""

    word.Documents.Open(path)
    doc = word.ActiveDocument
    table = doc.Tables(1)
    # Process the data

for file in files:
    convert_word_to_text(file, id)
doc.close()

在函数的末尾,将单词转换为文本可能会有所帮助。

因为您打开了一个文档:

word.Documents.Open(path)
doc
你也应该关闭它。大概是这样的:

def convert_word_to_text(path, id):
"""Converts the word documents in text format."""

    word.Documents.Open(path)
    doc = word.ActiveDocument
    table = doc.Tables(1)
    # Process the data

for file in files:
    convert_word_to_text(file, id)
doc.close()

在函数的末尾,
将单词转换为文本可能会有所帮助。

我添加了如何打开和处理文件的代码片段。这是正确的方法吗?@snowflake,没关系,只需确保返回文本(即大字符串或字符串列表),而不是
doc
table
。说清楚一点,我从来没有使用过
PyWin32
。实际上我从表中获取数据,创建一个新的纯文本文件,然后继续使用这个文本文件(不确定这是否重要)。@snowflake我不太清楚这意味着什么,但如果内存有问题,请尝试将所有内容都推向python原语(字符串、整数、列表等)我添加了如何打开和处理文件的代码段。这是正确的方法吗?@snowflake,没关系,只要确保返回文本(即,一个大字符串或字符串列表)我没有使用
doc
table
。更清楚地说,我从未使用过
PyWin32
。实际上,我从表中获取数据,创建一个新的纯文本文件,然后继续使用此文本文件(不确定是否有必要提及)@snowflake我不太清楚这意味着什么,但是如果你有内存问题,试着把所有东西都推到python原语(字符串、整数、列表等)上。谢谢Mike,我只退出了应用程序(word.application.quit(-1))但是不要关闭文件。我会试试这个。第一期有问题吗?谢谢Mike,我只退出了应用程序(word.application.quit(-1)),但没有关闭文件。我会试试这个。第一期有问题吗?