热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pythonTXT章节文转为epub和mobi格式

epub格式其实是个zip文件,将epub文件,通过改名epub为zip,可以解压出来,会类似下面的文件目录结构。反过来参

 epub 格式其实是个zip文件,将epub文件,通过改名epub为zip,可以解压出来,会类似下面的文件目录结构。 反过来参考这个结构就能构造出epub文件了。 通过这个方式,我写了一个txt章节文(小说)转epub进一步转mobi的程序。   原来在 windows下面用easypub 这个小工具很不错的,后面转mac后一直没有找到一个简单的工具,于是自己动手做一个。

kindle不会吃灰了。

下面是核心代码,可参考用。

#!/usr/bin/env python
# -*- coding: utf-8 -*-# Project: wxepub
# File : main.py
# Author : Long.Xu
# http://gnolux.blog.csdn.net
# QQ:26564303 weixin:wxgnolux
# Time : 2022/5/20 01:40
# Copyright 2022 Long.Xu All rights Reserved.
import os
import re
import zipfilefrom jinja2 import Environment, FileSystemLoaderdef txt2epub(save_as_path, text_file_path, cover_image_path, bookname, author):"""将文本文件转为epub格式:param save_as_path: 保存epub的文件路径:param text_file_path: 文本文件路径:param cover_image_path: 封面图片路径:param bookname: 书名:param author:作者:return:"""if os.path.exists(text_file_path):print("开始转换文件")with open(text_file_path, 'r') as f:cOntent= f.read()# 英文章节# regex = "^\s*Chapter\s*[0123456789IVX]*"# 中文章节regex = r"^\s*([第卷][0123456789一二三四五六七八九十零〇百千两]*[章回部节集卷].*)\s*"splits = re.split(regex, content, flags=re.M)items = [(splits[i], splits[i + 1]) for i in range(1, len(splits) - 1, 2)]if len(items) > 0:print("ok")tmploader = FileSystemLoader(os.path.abspath('./template/'))tmpenv = Environment(loader=tmploader)book = zipfile.ZipFile(save_as_path, 'w')# images# container.xmlbook.write('./template/META-INF/container.xml', 'META-INF/container.xml')# textnav = tmpenv.get_template("text/nav.html")nav_html = nav.render(items=items, bookname=bookname)book.writestr('text/nav.html', nav_html)print(nav_html)part = tmpenv.get_template("text/part.html")index = 0for item in items:index += 1part_html = part.render(item=item, index=index, bookname=bookname)book.writestr('text/part%s.html' % index, part_html)# content.opfopf = tmpenv.get_template("content.opf")content_opf = opf.render(items=items, bookname=bookname, author=author)book.writestr('content.opf', content_opf)# cover.jpegbook.write('./template/cover.jpeg?s=#39;, 'cover.jpeg?s=#39;)# mimetypebook.write("./template/mimetype", 'mimetype')# page_styles.cssbook.write('./template/page_styles.css', 'page_styles.css')# stylesheet.cssbook.write('./template/stylesheet.css', 'stylesheet.css')# titlepage.xhtmlbook.write('./template/titlepage.xhtml', 'titlepage.xhtml')# toc.ncxncx = tmpenv.get_template("toc.ncx")toc_ncx = ncx.render(items=items, bookname=bookname)book.writestr('toc.ncx', toc_ncx)print(toc_ncx)book.close()print("ok")else:print("源文件不存在")passtxt2epub('/Users/xulong/Downloads/冰与火之歌.epub', '/Users/xulong/Downloads/冰与火之歌.txt', '', bookname='书名', author='xulong')

 有了 epub 格式,再转mobi 只要 用 kindlegen 工具就可了。一个命令就能搞定。


推荐阅读
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 如何使用Python从工程图图像中提取底部的方法?
    本文介绍了使用Python从工程图图像中提取底部的方法。首先将输入图片转换为灰度图像,并进行高斯模糊和阈值处理。然后通过填充潜在的轮廓以及使用轮廓逼近和矩形核进行过滤,去除非矩形轮廓。最后通过查找轮廓并使用轮廓近似、宽高比和轮廓区域进行过滤,隔离所需的底部轮廓,并使用Numpy切片提取底部模板部分。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • 巧用arguments在Javascript的函数中有个名为arguments的类数组对象。它看起来是那么的诡异而且名不经传,但众多的Javascript库都使用着它强大的功能。所 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • Ansibleplaybook roles安装redis实例(学习笔记二十九)
    1、相关redis参数:2、templatesredis.conf配置相关参数:daemonizeyespidfilevarrunredis_{{red ... [详细]
author-avatar
ke天天_809
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有