2016-06-27 6 views
2

Я получаю сообщение об ошибке при попытке доступа к файлам из моего рабочего каталога. Это не дубликат вопроса @dsphoebe, потому что файл, который я пытаюсь открыть, является, конечно, файлом .docx и по какой-то причине я не могу его открыть.Пакет не найдена ошибка на окнах в python-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 слова с одним пробелом (то есть my doc.docx). Но преобразование в объект типа «Документ» работает для другого слова doc в той же папке, что только ONE слово!

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

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 бы. Очень смущает. Кто-нибудь знает, как диагностировать эту проблему?

+0

ли файл «мои doc.docx» открыт, если поместить дефис, где пространство Это полезный тест, потому что исключает проблемы с .docx файл? и сузить его до проблемы с открытием файла ОС. – scanny

+0

Нет, my-doc.docx не откроет его :(так это значит, что проблема с открытием файла ОС? – Vince

+2

** Некоторые из документов в моем списке были с ПЕРЕД 2007 г. python-docx НЕ МОЖЕТ БЫТЬ ... Это была моя проблема здесь. ** У этих просто было 2 слова в их названиях тоже:/ – Vince

ответ

3

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

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

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

import os.path 
rootdir = 'C:\\Users\\me\\Documents\\Python\\mydocs\\' 
doc = docx.Document(os.path.join(rootdir, "my doc.docx")) 
+0

Я действительно использовал 'rootdir' для другой вещи, чтобы посмотреть, действительно ли это было в папке, которую я хотел. вот что я использовал для: 'для subdir, dirs, файлов в os.walk (rootdir): для файла в файлах: print (file)' В этом списке указано каждое слово doc, которое было в моей папке. Но когда я заменил команду 'print (file)' командой объекта документа, такой как 'doc = docx.Document (file)', он сказал бы мне, что документ с 2-мя словами не найден. Я пробовал os.path.join и по-прежнему ту же ошибку ... @ Eric La Fevers – Vince