这篇文章上次修改于 829 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

昨天群友发了一个漫画给我,我今天下载一看,这他妈什么鬼格式?(.kepub.epub)本着能不下奇怪的软件就不下的理念(更何况这些东西基本上只有安装版,没有解压版),我首先去百度了一下这个格式到底是什么东西.经过一番摸索之后发现它居然是HTML形式的,那就简单了,Python直接开导!

2021-12-05T11:45:32.png
具体来说,电子书格式和Java中的jar包有点像,都是打包改个后缀名.对于一般情况来说,想要解压这些非正常后缀的文件首先要改一下后缀名才行,但是对于程序来说是不需要的,只要文件的二进制流没问题就能解压.

2021-12-05T11:46:10.png
思路很简单,首先通过后缀名判断获取到所有电子书格式的文件,然后在文件中查找图片后缀的文件,并且只解压这些图片,由于存在同名,因此还是创建一个和源文件同名的文件夹比较好(其实是我懒得写重命名)美中不足的是我不知道怎么修改解压路径,图片在文件中的相对路径是image/xxx.jpg,解压之后会在我创建的文件夹中的image文件夹里,经过我一顿折腾后还是放弃了这条路,或许还是写个.bat脚本更合适?

由于源文件还是蛮大的(1.14G),因此我做了一个进度输出,进度条模糊输出和文字详细输出,但是不能一起用这就很操蛋.

代码很少,但是看下面注释中的东西就知道我为什么放弃了(还报错!)

import os
import shutil
import zipfile
from alive_progress import alive_bar

dir_name = r'D:\QQ\964832091\FileRecv\端脑\\'

out_put = os.path.expanduser('~')+r'\Desktop\output\\'
if not os.path.exists(out_put):
    os.makedirs(out_put)
suffix_list = ['.jpg', '.jpeg', '.png', '.bmp']
equb = ['equb', 'EQUB']
files_name_list = [name for name in os.listdir(dir_name)]

with alive_bar(len(files_name_list)) as bar:
    for item in files_name_list:
        zip_file = zipfile.ZipFile(dir_name+item)
        zip_list = zip_file.namelist()
        for i in zip_list:
            for j in suffix_list:
                if not j in i:
                    continue
                elif not '.html' in i:
                    # tmp_img=zip_file.open(i,mode='rb')
                    tmp_file_path=item.replace('.kepub.epub', '')
                    # print('\r正在解压:'+tmp_file_path + r'/'+i, end='', flush=True)

                    zip_file.extract(i, out_put+tmp_file_path)
                    # shutil.move(out_put+tmp_file_path+i,out_put+tmp_file_path+i.replace('image/',''))
                    # os.rmdir(out_put+tmp_file_path+'image')
        bar()
        zip_file.close()

最后的成品

2021-12-05T11:47:20.png