首页 > 编程语言 >使用Python将EPUB电子书网文主角换成自己

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

时间:2024-11-07 21:44:12浏览次数:7  
标签:解压 文件 网文 Python epub file path EPUB

文章目录

使用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代码示例:

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}')

重点是下面几行

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

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

标签:解压,文件,网文,Python,epub,file,path,EPUB
From: https://blog.csdn.net/zxjiaya/article/details/143589441

相关文章

  • python基础——04数据类型(元组,集合,字典)
    一、元组(tuple)1.1什么是元组元组和列表相似,但元组的元素放在()里面。t=(1,2,3,4,5)print(type(t))#<class'tuple'>t1=('hello')#<class'str'>这不是元组t2=('hello',)#<class'tuple'>print(type(t1),type(t2)......
  • python小练习——条件语句if
    if语句是Python中进行条件判断的基础工具,通过它可以轻松实现逻辑选择和流程控制。掌握好if语句的使用方法,对编写高效、灵活的程序至关重要。今天我们通过七个简单的题目来熟悉一下Python中的if条件语句。1、从键盘输入年龄,判断是否大于等于18岁,如果满足就输出“已成......
  • 图像去雾+图像去雨(matlab+python)
    看到许多小伙伴想进行图像去雨,图像去雾的任务,由于以前进行了此类项目,所以在此书写博客进行交流。#去雨前言从静止图像中去除雨水是一项复杂且具有挑战性的任务。雨滴仅影响图像的很小区域,因此导致确定应考虑哪个区域和不应考虑哪个区域的混乱。在本文中,已经实现了一种新......
  • 免费送源码:python+Django+MySQL Django实验室管理系统 计算机毕业设计原创定制
    摘 要本论文主要论述了如何使用python语言、Django框架开发一个实验室管理系统,本系统将严格按照软件开发流程,进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分......
  • 使用python中的pygame简单实现飞机大战游戏
    前言在这个教程中,我们将使用Python的Pygame库来开发一个简单的飞机大战游戏。Pygame是一个开源的Python库,用于编写视频游戏。它包括计算机图形和声音库,设计目的是为游戏开发者提供一个简单易用的接口。一、环境准备在开始编码之前,请确保已经安装了Python和Pyga......
  • 三十四、Python基础语法(文件操作-上)
    一、介绍文件:可以储存在长期储存设备上的一段数据,在计算机储存的数据都是二进制的形式储存的,我们用软件打开文件不是看见0和1是因为软件会自动将二进制数据进行转换。二、文件操作1.打开文件打开文件:文件是在硬盘中储存的,打开文件可以理解为将硬盘中文件加载到内存中,在pyth......
  • 三十三、Python基础语法(面向对象其他语法-下)
    一、属性划分1.类属性类属性:类属性就是类对象具有的属性,一般写法在类内部、方法的外部定义的变量,就是类属性,类属性在内存中只有一份。可以通过类名直接访问,也可通过实例访问。classCircle:#类属性,定义圆周率pi=3.14159def__init__(self,radius):......
  • 三十、Python基础语法(继承-下)
    方法重写重写:在子类中定义和父类中名字相同的方法,如果父类中方法不能满足子类对象的需求,重写的形式有覆盖和扩展一、覆盖式重写classVehicle:defmove(self):print("Thevehicleismovinginageneralway.")classCar(Vehicle):#重写move方法......
  • 终于弄懂了Python中元组与列表的区别
    列表与元组的区别在Python编程中,列表和元组是两种非常重要的数据结构。尽管它们在许多方面具有相似性(如都可以存储任意类型的元素、都可以通过索引访问元素等),但在使用上仍有明显的区别。理解它们的不同点对于选择合适的数据结构、提高程序的性能和代码的可读性都有重要帮助......
  • [python turtle summary] Python 海龟画图 函数总结
    Turtle文档导入turtleimportturtleastimportturtlefromturtleimport*Turtle函数方法移动和绘制penup()抬笔pendown()落笔goto(x,y)移动forward(distance)|fd(distance)前进backward(distance)|back(distance)|bk(distance)后退right(angle)|rt(ang......