2014-03-25 135 views
1

在使用epub python包時得到這個錯誤,或者你可以說python的epub庫,想知道該怎麼做。請幫助..用於python的epub庫

Traceback (most recent call last): 
File "F:/4th semester/3", line 4, in <module> 
book=epub.open_epub('d:\welcome.epub') 
File "C:\Python27\lib\site-packages\epub\__init__.py", line 43, in open_epub 
return EpubFile(filename, mode) 
File "C:\Python27\lib\site-packages\epub\__init__.py", line 82, in __init__ 
self._init_read() 
File "C:\Python27\lib\site-packages\epub\__init__.py", line 143, in _init_read 
self.toc = ncx.parse_toc(self.read_item(item_toc)) 
File "C:\Python27\lib\site-packages\epub\__init__.py", line 276, in read_item 
return self.read(os.path.join(self.content_path, path)) 
File "C:\Python27\lib\zipfile.py", line 931, in read 
return self.open(name, "r", pwd).read() 
File "C:\Python27\lib\zipfile.py", line 957, in open 
zinfo = self.getinfo(name) 
File "C:\Python27\lib\zipfile.py", line 905, in getinfo 

'有存檔中沒有名爲項%R' %名稱) KeyError異常: 「沒有名爲項u'OEBPS \\ toc.ncx」的檔案」 enter code here

回答

1

從你的問題,我認爲你使用Python-Epub庫從這裏:https://pypi.python.org/pypi/epub/0.5.1和你正在運行在Windows中。

它有助於知道EPUB s本質上是zip文件。 Python EPUB處理庫中的典型錯誤是試圖在 zip檔案中構建路徑,其中os.path.join就像是常規文件系統一樣。在Windows os.path.join上擠壓未被zipfile模塊識別的Windows文件路徑分隔符(即\\)。

這是epub庫中的錯誤(應該報道),但你可以很容易地得到一個變通辦法如下:

  1. 確定您epub源位於:

    python -c "import epub; print epub.__file__"

  2. 將以下函數添加到epub來源:

    def zip_path_join(a, *p): for b in p: a += '/' + b return a

  3. 搜索epub來源os.path.joinzip_path_join

  4. 享受更換!
+1

我彙報到位桶的錯誤爲:https://到位桶.ORG/exirel/EPUB /問題/ 5 /無效拉鍊路 –

2

感謝您的問題報告。對我來說,這是......恥辱,我應該在很久以前解決這個問題。因此,我已經推出了一個新版本0.5.2,並且您可以升級您的版本並查看它是否按預期工作(它應該,但是我沒有在任何Windows環境下運行單元測試)。

PS:我不會說「我有新的生活之類的東西發生」,但...是啊,這只是它...