背景:当我们从网上下载一些电子小说或书籍的时候,一般文件的格式可能是.epub、.mobi等。这些格式的文件需要特定的手机阅读软件才能打开(有些能打开但是会出现乱码,排版混乱的情况)。蓝瘦想哭~~

由于PDF格式的文件查看打开比较方便,所以百度搜索了一下电子书转换为PDF格式的软件,没有几个是好用的,最后终于找到一个比较满意的 calibre 可以批量,且支持多种格式转换【此处并非打广告,这个软件确实还可以】

一、mobi 转换 pdf 步骤

  • 添加书籍– 选择需要转换的书籍
  • 设置文件导出的目录,以及输出格式
  • 按住Ctrl, 选择多个书籍
  • 右键选择转换书籍–选择批量转换
  • 最后等待所有书籍转换成功

二、查看转换后的结果目录

打开转换的书籍的目录,可以看到所有换的书籍以作者名字命名,下一级目录则以书名命名。该目录下包含封面图片,源文件以及转换后的PDF文件,还有 metadata.opf 书籍信息文件

    

三、将PDF还原文件名且移出至新目录

从转换后的目录来看,源文件的中文名都换成了拼音的名字,看的蓝瘦(一个文件还好说,这么多个…)
需求: 将文件换成原来的中文名,且移动到新的目录下
思路: 从metadata.opf 读取 title标签【即书名】,然后将PDF 文件名替换为 title标签的名字

# -*- coding: utf-8 -*-
"""
@ author: zzw
@ data: 2018-05-06
"""
import os
import re


class FileRename(object):
   # def __init__(self, np):
        # self.oldPath = op
        # self.newPath = np

    # 获取文件的中文名字
    @staticmethod
    def get_name(file):
        name = \'\'
        name_list = []
        f = open(file, \'r\', encoding=\'utf-8\')
        for line in f.readlines():
            # 格式:   <dc:title>string</dc:title>
            if \'<dc:title>\' in line:
                # 得到 string 且将字符串中含有windows 下特殊字符替换
                string = line.strip().lstrip(\'<dc:title>\').rstrip(\'</dc:title>\')
                name = re.sub(r\'[\\/:*?"<>|]\', \'_\', string)
                # 去重(如果name出现相同的行则增加字符串(2))
                if name not in name_list:
                    name_list.append(name)
                else:
                    name = name+\'(2)\'
        f.close()
        return name

    def file_rename(self, path, n_path):
        dir_list = os.listdir(path)
        for fp in dir_list:
            dir_next = os.path.join(path, fp)
            if os.path.isdir(dir_next):
                self.file_rename(dir_next, n_path)
            elif os.path.isfile(dir_next) and os.path.splitext(dir_next)[1] == \'.pdf\':
                # 从 pdf文件同路径下的metadata.opf 文件获取中文名字
                src = os.path.dirname(dir_next) + "\\metadata.opf"
                if not os.path.exists(n_path):
                    os.mkdir(n_path)
                new_name = n_path + os.sep + self.get_name(src) + ".pdf"
                try:
                    # 重命名文件且移动文件
                    os.rename(dir_next, new_name)
                except OSError as e:
                    print(e)
            else:
                pass


if __name__ == \'__main__\':
    FileRename().file_rename("F:\\zzwTest\\book", "F:\\zzwTest\\newBook")
    print(\'done\')

最后看一下效果图:

版权声明:本文为zeo-to-one原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zeo-to-one/p/9463313.html