docx.opc.exceptions.PackageNotFoundError:在

问题描述 投票:0回答:10

无法按路径打开 doxc 文件(在...处找不到包)

目录查看:

enter image description here


代码:

from docx import Document

# some path of file:
path = 'TestDir/dir2/doc22.docx'

# open docx file:
doc = Document(path)

有这个:

Traceback (most recent call last):
  File "T23_7.py", line 73, in <module>
    searchRegex(dirName, regex)
  File "T23_7.py", line 57, in searchRegex
    current_doc = Document(docx_file)
  File "/home/ch_dmitriy/Documents/Projects/Tutorials/mech-mat-homework/env/lib/python3.5/site-packages/docx/api.py", line 25, in Document
    document_part = Package.open(docx).main_document_part
  File "/home/ch_dmitriy/Documents/Projects/Tutorials/mech-mat-homework/env/lib/python3.5/site-packages/docx/opc/package.py", line 116, in open
    pkg_reader = PackageReader.from_file(pkg_file)
  File "/home/ch_dmitriy/Documents/Projects/Tutorials/mech-mat-homework/env/lib/python3.5/site-packages/docx/opc/pkgreader.py", line 32, in from_file
    phys_reader = PhysPkgReader(pkg_file)
  File "/home/ch_dmitriy/Documents/Projects/Tutorials/mech-mat-homework/env/lib/python3.5/site-packages/docx/opc/phys_pkg.py", line 31, in __new__
    "Package not found at '%s'" % pkg_file
docx.opc.exceptions.PackageNotFoundError: Package not found at 'TestDir/dir2/doc22.docx'

请帮忙。

python python-docx
10个回答
5
投票

此错误仅意味着您指定的位置没有

.docx
文件。

由于您指定了 relative 路径,因此使用的实际路径是通过将

'TestDir/dir2/doc22.docx'
添加到 Python 在运行时使用的当前工作目录来确定的。

您可以通过以下简短的代码片段发现正在使用的路径:

import os
print(os.path.abspath('TestDir/dir2/doc22.docx')

我希望您会发现它打印出一个不存在的路径,并且您需要修改提供给它的路径字符串以指向正确的位置。

最坏的情况,您可以指定一个 absolute 路径,例如

/home/ch_dmitriy/Documents/Projects/Tutorials/TestDir/dir2/doc22.docx


5
投票

我对正确的路径也有同样的问题。对我有用的是创建带有空

Document()
.

的 .docx 文件
document = docx.Document()
document.save('your_doc_name.docx')

所以你可以做类似的事情:

try:
  document = docx.Document('your_doc_name.docx')
except:
  document = docx.Document()
  document.save('your_doc_name.docx')
  print("Previous file was corrupted or didn't exist - new file was created.")

2
投票

我遇到了同样的问题。只需关闭文档(在代码评估期间打开的文档)就可以完成我的工作。


2
投票

docx.opc.exceptions.PackageNotFoundError:找不到包

此错误是由您的 docx 文件中的任何内容引起的,您只需在文件中键入几个空格字符即可修复它。


2
投票

我遇到此问题的另一个棘手原因是:DOCX 实际上不是 DOCX 文件。您可以使用文字处理器(例如 MS Word)打开文件并在表末尾查看实际文件类型。 要解决此问题,您可以

save as
带有 DOCX tail 的文件,以便
docx
可以对其进行处理。


1
投票

尝试打开文档。就我而言,该文档已损坏。


0
投票

我在python中遇到了同样的错误,因为我使用Os.walk命令在目录中搜索文件(这里是导入docx模块后的docx文件):

docx.opc.exceptions.PackageNotFoundError: Package not found at

但我确实使用了完整路径,正如上面Scanny提到的:这意味着该文件不存在,而且我在打开它们之前打印了所有文件路径,发现有一些文件显然是windows中word文件的临时创建文件,当我们编辑它们时,它们都以'~S'开头,并且它们实际上并不存在,这应该是错误的原因。 我也纠正了这个问题:

if strfile.endswith('.docx') and not strfile.startswith('~$'):

0
投票

我遇到了类似的问题,但在虚拟环境中工作。我的脚本无法找到没有完整路径定义的源文件。我发现虚拟环境设置指向 ./venv 子目录作为工作目录。因此,我只需修复 PyCharm 运行设置中的路径即可运行。第二种解决方案是将源文件移动到 ./venv 子目录。


0
投票

此问题的另一个原因是存在多个不是 .docx 格式的隐藏文件,这就是出现此错误的原因。如果这些文件是打开的文件,则这些文件可能以 (“~$”) 开头;如果您使用的是 macOS,则这些文件可能以 (“.DS”) 文件开头。

当我在代码中添加以下异常时,我的错误得到解决:

for file in os.listdir(folder_path):
    if file.endswith(".docx") and not file.startswith('~$') and not file.startswith('.DS_'):
        <enter rest of the code here

-1
投票

我以前遇到过这个问题,解决方案可以通过在文件中手动添加一些内容并将其删除。

© www.soinside.com 2019 - 2024. All rights reserved.