童生
- UID
- 160425
- 积分
- 157
- 回帖
- 129
- 主题
- 15
- 铜币
- 740
- 威望
- 85
- 银币
- 0
- 贡献
- 0
- 发书数
- 0
- 注册时间
- 2023-8-29
- 最后登录
- 2024-5-6
- 在线时间
- 26 小时
|
EPUB是一种流行的电子书格式,其本质其实是由一系列的HTML文件、图片、样式表(CSS)和字体文件构成,通常被封装在一个.zip压缩包中,扩展名为.epub。LZ的这个脚本执行了以下操作:
好的,我将详细解释这个脚本的每一步操作:
1. 导入必要的Python模块:zipfile用于解压缩和压缩ZIP文件,os和glob用于文件和目录操作,shutil用于高级文件操作。
2. 定义find_files_with_char函数:在指定目录中查找文件名中含有特定字符串的文件。
3. 定义rename_files_in_directory函数:在指定目录中查找文件并重命名。如果文件名包含old_name,则将其替换为new_name。
4. 定义extract_file_from_zip函数:解压EPUB文件并重命名解压后的文件。
- 使用zipfile模块打开EPUB文件,遍历其中的文件。
- 对于图片文件(扩展名为.jpg、.webp或.png),将其解压到./OEBPS/Images/目录,并将文件名重命名为"1.jpg"、"2.webp"等格式。
- 对于HTML文本文件(扩展名为.html或.xhtml),将其解压到./OEBPS/Text/目录,并将文件名重命名为"1.html"、"2.xhtml"等格式。
- 对于字体文件(扩展名为.ttf、.TTF或.otf),将其解压到./OEBPS/Fonts/目录,并将文件名重命名为"1.ttf"、"2.TTF"等格式。
- 对于样式表文件(扩展名为.css),将其解压到./OEBPS/Styles/目录,并将文件名重命名为"1.css"、"2.css"等格式。
- 在重命名的过程中,将原始文件名和新文件名的对应关系保存在name_pair字典中。
5. 定义replace_strings_in_file函数:替换文件中的字符串。
- 读取文件内容。
- 对replacements字典进行迭代,将其键(旧字符串)替换为其值(新字符串)。
- 将修改后的内容写回文件。
6. 定义compress_and_delete函数:压缩文件夹并删除原始文件夹。
- 确保传入的路径是目录。
- 使用zipfile模块将文件夹压缩到指定的ZIP文件中。
- 删除原始文件夹。
7. 提示用户输入EPUB文件路径,并尝试打开文件。如果文件不存在、权限不足或发生其他错误,给出相应的提示。
8. 开始转换过程:
- 切换工作目录到EPUB文件所在的目录。
- 调用extract_file_from_zip函数解压EPUB文件并重命名解压后的文件。
- 遍历./OEBPS目录下的所有文件,对于非字体和图片文件,调用replace_strings_in_file函数替换文件内容中的字符串,使用name_pair字典中记录的新旧文件名对应关系进行替换。
- 调用compress_and_delete函数将修改后的文件夹重新压缩为一个新的EPUB文件,文件名为"new"+原始文件名。如果新文件已存在,则删除它。
- 将mimetype文件添加到新的EPUB文件中。mimetype文件是EPUB文件的必要组成部分,用于标识该文件是一个EPUB电子书。
- 删除临时的mimetype文件。
9. 如果转换过程中发生任何错误,给出相应的提示。
通过以上详细的步骤,这个脚本对无法在PC上打开阅读的EPUB文件进行了修复。它规范化了文件名,修复了HTML文本中的资源引用,并添加了必要的mimetype文件。这些操作解决了由于文件名不规范、引用错误和缺少mimetype文件导致的EPUB文件无法打开的问题,使得修复后的EPUB文件可以在PC上正常打开和阅读。
很佩服LZ的钻研精神,我也遇到了很多次如音大大的epub无法在PC上阅读的体验,倒是从没想到写个脚本来替换修复。感谢LZ的辛勤付出! |
|