背景:當我們從網上下載一些電子小說或書籍的時候,一般文件的格式可能是.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')
最后看一下效果圖:

