Пакет не найден в Windows в python-docx?

Я получаю сообщение об ошибке, когда пытаюсь получить доступ к файлам из моего рабочего каталога. Это не дубликат вопроса @dsphoebe, потому что файл, который я пытаюсь открыть, определенно является файлом .docx, и по какой-то причине я не могу его открыть.

rootdir = 'C:\\Users\\me\\Documents\\Python\\mydocs\\'
for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        print(file)    #prints all word docs in my folder, just like I want

Теперь, когда я заменяю этот оператор печати оператором, который создает объект docx,

rootdir = 'C:\\Users\\me\\Documents\\Python\\mydocs\\'
for subdir, dirs, files in os.walk(rootdir):
    for file in files:
        doc = docx.Document(os.path.join(rootdir, file))
        ...
        #continuing with what I wanted to do w/ the documents...

Error: "Package not found at '%s'" % pkg_file
docx.opc.exceptions.PackageNotFoundError: Package not found at 'my doc.docx'

Теперь в этой папке mydocs мой doc.docx - это правильный заголовок, и это, безусловно, файл .docx. Название этого определенного файла состоит из 2 слов с одним пробелом (например, мой doc.docx). Но преобразование в объект типа «Документ» работает для другого документа Word в той же папке, который содержит только ОДНО слово!

Это работает:

    rootdir = 'C:\\Users\\me\\Documents\\Python\\mydocs\\'
    doc = docx.Document(os.path.join(rootdir, "Access.docx"))
    Exited with code = 0

Но это не так:

    rootdir = 'C:\\Users\\me\\Documents\\Python\\mydocs\\'
    doc = docx.Document(os.path.join(rootdir, "Able2Extract Professional.docx"))
    Exited with code=1

Итак, two words.docx не будет работать, а oneword.docx будет. Очень запутанно. Кто-нибудь знает, как диагностировать эту проблему?


person Vince    schedule 27.06.2016    source источник
comment
Открывается ли файл my doc.docx, если поставить дефис вместо пробела? Это полезный тест, поскольку он исключит проблему с файлом .docx и сузит ее до проблемы с открытием файла ОС.   -  person scanny    schedule 27.06.2016
comment
Нет, my-doc.docx не откроет его :( Значит, это проблема с открытием файла ОС?   -  person Vince    schedule 28.06.2016
comment
Некоторые документы в моем списке относятся к ДО 2007 г., и python-docx НЕ МОЖЕТ обработать. Это была моя проблема. У тех, у кого тоже было два слова в заголовках ›: /   -  person Vince    schedule 28.06.2016
comment
Да, так и будет :) Те более ранние файлы были в совершенно другом формате, думаю, в двоичном формате. Обычно встречаются файлы с расширением «.doc», чтобы отличить их от файлов «.docx», где «x» означает XML.   -  person scanny    schedule 28.06.2016


Ответы (3)


Где вы используете переменную rootdir?

Если docx просто пытается открыть 'my doc.docx', объединив эту строку с текущим каталогом, возможно, он неправильно экранирует пробел в имени файла.

Попробуйте использовать os.path.join():

import os.path
rootdir = 'C:\\Users\\me\\Documents\\Python\\mydocs\\'
doc = docx.Document(os.path.join(rootdir, "my doc.docx"))
person Eric La Fevers    schedule 27.06.2016
comment
На самом деле я использовал rootdir для другой вещи, чтобы проверить, действительно ли он попал в то, что мне нужно. вот для чего я его использовал: for subdir, dirs, files in os.walk(rootdir): for file in files:print(file) В нем перечислены все слова doc, которые были в моей папке. Но когда я заменил команду print(file) на команду объекта документа, например doc = docx.Document(file), она сообщила бы мне, что документ с заголовком из двух слов не найден. Я пробовал os.path.join и все та же ошибка ... @Eric La Fevers - person Vince; 28.06.2016

Ответ Эрика совершенно прав, просто хотел бы отметить, что у меня было такое же исключение, и ошибка заключалась в том, что у меня уже был открыт текстовый документ.

Решение: закройте текстовый документ и откройте копию, если вы хотите проанализировать и прочитать его.

person carduque    schedule 01.04.2020

Я получил это сообщение об ошибке из-за ошибки в пути. (Отсутствует /)

person Bartli    schedule 12.05.2020