Ubuntu

文件夾中所有 .epub 文件的電子書轉換

  • March 9, 2019

此程式碼將 epub 文件轉換為 txt 文件:

ebook-convert "book.epub" "book.txt"

如何使用它來轉換目錄中的所有 .epub 文件?

我正在使用 Ubuntu。

程式碼

from os import listdir, rename
from os.path import isfile, join
import subprocess


# return name of file to be kept after conversion.
# we are just changing the extension. azw3 here.
def get_final_filename(f):
   f = f.split(".")
   filename = ".".join(f[0:-1])
   processed_file_name = filename+".azw3"
   return processed_file_name


# return file extension. pdf or epub or mobi
def get_file_extension(f):
   return f.split(".")[-1]


# list of extensions that needs to be ignored.
ignored_extensions = ["pdf"]

# here all the downloaded files are kept
mypath = "/home/user/Downloads/ebooks/"

# path where converted files are stored
mypath_converted = "/home/user/Downloads/ebooks/kindle/"

# path where processed files will be moved to, clearing the downloaded folder
mypath_processed = "/home/user/Downloads/ebooks/processed/"

raw_files = [f for f in listdir(mypath) if isfile(join(mypath, f))]
converted_files =  [f for f in listdir(mypath_converted) if isfile(join(mypath_converted, f))]

for f in raw_files:
   final_file_name = get_final_filename(f)
   extension = get_file_extension(f)
   if final_file_name not in converted_files and extension not in ignored_extensions:
       print("Converting : "+f)
       try:
           subprocess.call(["ebook-convert",mypath+f,mypath_converted+final_file_name]) 
           s = rename(mypath+f, mypath_processed+f)
           print(s)
       except Exception as e:
           print(e)
   else:
       print("Already exists : "+final_file_name)

對於單個目錄中的文件(不遞歸到子目錄),您只需要一個簡單的 shell 循環,例如

for f in ./*.epub; do
 ebook-convert "$f" "${f%.epub}.txt"
done

shell 參數擴展${f%.epub}刪除了尾隨.epub,以便您可以添加.txt文件副檔名。

引用自:https://unix.stackexchange.com/questions/505323