使用Python将EPUB电子书网文主角换成自己

news/2024/11/8 15:45:04 标签: python, 开发语言

文章目录

      • 使用Python将EPUB电子书网文主角换成自己
        • EPUB电子书
        • 准备工作
        • 操作步骤
        • Python实现代码
        • 代码解析

使用Python将EPUB电子书网文主角换成自己

最近看网文小说,想到一个有意思的东西,为什么不把网文主角换成自己的名字,这样看起来不更有沉浸感,更加有代入感。于是便从epub文件下手。感觉只是一个很简单的文字替换功能。结果发现自带的很多小说阅读器居然没有这个功能。于是想到只是个很简单的字符串替换,python这不一下搞定。chatGPT,启动。

EPUB电子书

EPUB电子书是一种广泛使用的电子书格式,其中的内容通常以HTML或XHTML文件的形式存储。其实如果你不嫌麻烦的话,直接用calibre打开, 编辑源文件,一个个查找替换(重复几千次就好了,笑)。
EPUB电子书本质上是个压缩文件,首先将它改成.zip格式,解压缩后,就可以看到文件夹里字体,图片,html的章节,也可以继续修改。然后压缩成zip,再改成epub格式即可。
在这里插入图片描述

准备工作

在开始之前,你需要确保以下几点:

  1. Python环境:已经安装Python 3。我使用的是VScode编辑器,按理说,这么简单的功能,大部分编辑器都都可以
  2. 必要库:需要用到zipfileos库。基本上大部分python环境都有。
  3. EPUB文件:准备好你想要修改的EPUB文件,不确定别的mobi,awz3格式兼是否兼容
操作步骤
  1. 解压EPUB文件
    EPUB文件本质上是一个ZIP压缩包,其中包含了电子书的文本内容、图片和其他资源。我们需要先将其解压。

  2. 遍历并修改章节内容
    遍历解压后的文件,找到所有包含文本内容的HTML或XHTML文件,进行字符串替换。

  3. 重新打包
    将修改后的文件夹重新打包成EPUB格式,以供阅读器正常识别。

Python实现代码

以下是完整的Python代码示例:

python">import zipfile
import os

# 设置EPUB文件路径和替换名字
epub_path = 'book.epub'
old_name = 'name1'
new_name = 'your_name'
output_epub_path = 'book.epub'

# 解压EPUB文件
with zipfile.ZipFile(epub_path, 'r') as epub_zip:
    epub_zip.extractall('extracted_epub')

# 遍历解压文件夹,修改章节内容
for root, dirs, files in os.walk('extracted_epub'):
    for file in files:
        if file.endswith('.html') or file.endswith('.xhtml'):
            file_path = os.path.join(root, file)
            with open(file_path, 'r', encoding='utf-8') as f:
                content = f.read()

            # 替换主角名字
            modified_content = content.replace(old_name, new_name)

            # 保存修改后的内容
            with open(file_path, 'w', encoding='utf-8') as f:
                f.write(modified_content)

# 压缩修改后的内容为新的EPUB文件
with zipfile.ZipFile(output_epub_path, 'w') as new_epub_zip:
    for root, dirs, files in os.walk('extracted_epub'):
        for file in files:
            file_path = os.path.join(root, file)
            arcname = os.path.relpath(file_path, 'extracted_epub')
            new_epub_zip.write(file_path, arcname)

# 清理解压目录
import shutil
shutil.rmtree('extracted_epub')

print(f'新的EPUB文件已生成:{output_epub_path}')

重点是下面几行

python">epub_path = 'book.epub'#源文件的名字,建议放在同一个文件夹,直接运行。不在一个文件夹要输入地址
old_name = 'name1'#原主角的名字
new_name = 'your_name'#你的名字
output_epub_path = 'book.epub'#新的电子书的名字
代码解析
  • 解压EPUB文件:使用zipfile库解压EPUB文件到指定目录。
  • 查找与替换:遍历目录中的.html.xhtml文件,替换主角名字。
  • 重新打包:将修改后的内容压缩成新的EPUB文件。
  • 清理:使用shutil.rmtree()删除临时解压目录。

挺有意思的小玩具,但是实际使用,发现,如果用自己的名字,还是有点太尴尬,建议改成自己的网名,尴尬少很多。另外,对于外国名字更好,只有名,不会有别的变体。中文名字变体太多,问题太多。
果然还是实际上实践,更有意思呢,不然学了东西真没用。


http://www.niftyadmin.cn/n/5744088.html

相关文章

notebook 远程访问配置(python3.10)

一、生成密码 jupyter notebook password二、生成默认配置文件 jupyter notebook --generate-config三、修改配置文件 vim ~/.jupyter/jupyter_notebook_config.py ## 修改配置内容 c.ServerApp.ip * c.ServerApp.port 8888 ## 修改成将之前生成的密文 c.ServerApp.passwo…

Go语言的内置容器

文章目录 一、数组数组的定义数组声明数组特点数组元素修改 二、切片切片声明基于数组创建切片使用make()函数构造切片使用append()为切片动态添加元素\使用copy()复制新的切片数组与切片相互转换 三、Map映射Map定义使用make()函数创建map用切片作为map的值使用delete()函数删…

YOLOv11改进:SE注意力机制【注意力系列篇】(附详细的修改步骤,以及代码,与其他一些注意力机制相比,不仅准确度更高,而且模型更加轻量化。)

如果实验环境尚未搭建成功,可以参考这篇文章 ->【YOLOv11超详细环境搭建以及模型训练(GPU版本)】 文章链接为:YOLOv11超详细环境搭建以及模型训练(GPU版本)-CSDN博客 -------------------------------…

一篇Spring Boot 笔记

一、Spring Boot 简介 Spring Boot 是一个用于创建独立的、基于 Spring 的生产级应用程序的框架。它简化了 Spring 应用的初始搭建和开发过程,通过自动配置等功能,让开发者能够快速地构建应用,减少了大量的样板代码和复杂的配置。 二、核心特…

100种算法【Python版】第59篇——滤波算法之扩展卡尔曼滤波

本文目录 1 算法步骤2 算法示例2.1 示例描述2.2 python代码3 算法应用:机器人位姿估计扩展卡尔曼滤波(EKF)是一种处理非线性系统的状态估计算法。它通过线性化非线性系统来实现类似于线性卡尔曼滤波的效果。 1 算法步骤 (1)初始化 初始状态: x ^ 0 ∣ 0 \hat{x}_{0|0}

《XGBoost算法的原理推导》12-14决策树复杂度的正则化项 公式解析

本文是将文章《XGBoost算法的原理推导》中的公式单独拿出来做一个详细的解析,便于初学者更好的理解。 我们定义一颗树的复杂度 Ω Ω Ω,它由两部分组成: 叶子结点的数量;叶子结点权重向量的 L 2 L2 L2范数; 公式(…

代码随想录之字符串刷题总结

目录 1.反转字符串 2.反转字符串II 3.替换数字 4.翻转字符串里面的单词 5.右旋&&左旋字符串 1.反转字符串 题目描述: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外…

十五:java web(7)-- Spring Boot

目录 1. Spring Boot 简介 1.1 简介 1.2 Spring Boot 的特点 1.3 Spring Boot 和 Spring 的关系 2. Spring Boot 快速入门 2.1 创建第一个 Spring Boot 项目 3. Spring Boot 配置管理 3.1 application.properties 和 application.yml 配置 这两种都可以 好像现在更推荐…