python:epub文件批量转TXT
写在前面
代码很菜,而且写了很久之后才写的笔记,代码里仅包含主要函数的实现。
原因
有很多很多,大概8000本epub文件需要转换成TXT。没找到现成工具偷懒,就想写一段代码代工。
缺点
只对文字有效,图片类无法转化。
原理
先转换成压缩包,解压缩得到一些包含图书内容的html文件,从html标记中获取文本并保存。
* 转换成压缩包:修改文件名后缀为’.rar’
* 解压缩:使用360批量解压。作者又懒又菜,写出解压缩代码的用的时间要远远超过使用工具的时间。
* 遍历文件,生成html文件的路径
* 解析html文件,获取文本信息
* 保存成TXT
需要的代码
- 依赖的包
import os
from urllib.request import urlopen
from bs4 import BeautifulSoup
from nt import chdir
- 修改文件名后缀
##将.epub修改成.rar
def epub_rar(start):files = os.listdir(start+'\\.')#获取当前目录下的文件for filename in files:portion = os.path.splitext(filename)#将文件名拆成名字和后缀if portion[1] == ".epub":newname = portion[0] + ".rar"os.rename(start+'\\'+filename,start+'\\'+newname)#修改
例子:
jingxuan='E:\\BaiduYunDownload\\语料库\\精选电子书7200本合集'
starts=[]
files = os.listdir(jingxuan+'\\.')#获取当前目录下的文件
for filename in files:starts.append(jingxuan+'\\'+filename+'\\.')
for i in starts:epub_rar(i)
- 如果已经解压缩
##遍历文件夹,找出网页文件
def bianli(filepath):if os.path.isfile(filepath):if '.html'in filepath or '.xhtml' in filepath or '.htm' in filepath:all_file.append('file:\\\\'+filepath)else:filelist = os.listdir(filepath)for l in filelist:path=os.path.join(filepath,l)bianli(path)return all_file
例子:
##获取所有的文本名和文本下的的文件路径
filedic={}
start = 'E:\\BaiduYunDownload\\语料库\\豆瓣高分电子书合集'
files = os.listdir(rootdir)
for i in f_list:path = os.path.join(rootdir,i)all_file=[]all_file=bianli(path)filedic[i]=all_file
*获取文本内容
#把链接转换成txt文本,依赖urlopen和bs4
def get_text(url):html=urlopen(url)b=BeautifulSoup(html,'lxml').textreturn b
- 创建文件夹和保存文件
##创建文件夹
def mkdir(path): folder = os.path.exists(path) if not folder: #判断是否存在文件夹如果不存在则创建为文件夹 os.makedirs(path) #makedirs 创建文件时如果路径不存在会创建这个路径 else: print ("--- There is this folder! ---" )
##保存文件
def save_txt(filename,text):with open(filename,"w",encoding='utf-8') as f:f.write(text)
例子:
##生成精选7200的类别路径
start = 'E:\\BaiduYunDownload\\语料库\\精选电子书7200本合集'
newpath='E:\\BaiduYunDownload\\语料库\\精选电子书7200本txt合集'
mkdir(newpath)
files = os.listdir(start)
##获取精选7200的类别路径,创建对应的txt文件的路径
jingxuan_f=[]
new_f=[]##存放新txt文件的路径
for i in files:jingxuan_f.append(os.path.join(start,i))new_f.append(os.path.join(newpath,i))mkdir(os.path.join(newpath,i))
##转换精选电子书
for i in range(0,len(jingxuan_f)-1):f_list = os.listdir(jingxuan_f[i])leibiedic={}for f in f_list:path = os.path.join(jingxuan_f[i],f)all_file=[]all_file=bianli(path)leibiedic[f]=all_filefor name in leibiedic:try:textname=new_f[i]+'\\'+name+'.txt'result=''for url in leibiedic[name]:url=str(url)text=get_text(url)result=result+textexcept:print(name)continuesave_txt(textname,result)
- 把压缩文件删除
##遍历删除.rar文件
def bianlidel(filepath):if os.path.isfile(filepath):if '.rar'in filepath:os.remove(filepath)else:filelist = os.listdir(filepath)for l in filelist:path=os.path.join(filepath,l)bianlidel(path)
python:epub文件批量转TXT相关推荐
- python rtf转txt_将DOC、RTF格式文件批量转为TXT格式文件
Windows 下将目录下所有文件下的文件 拷贝到一个目录中:搜索"." 安装python 及 win32com模块 pip install pypiwin32 创建LDA_RTF ...
- json文件批量转为txt文件
json文件批量转为txt文件 1 批量json标注文件: 2 json所对应的各个图片: 3 每个json文件内容: [{"type": 1,"x": 116 ...
- 用python修改文件内容修改txt内容的3种方法
用python修改文件内容修改txt内容的3种方法 方法一.修改原文件方式 def updateFile(file,old_str,new_str):"""替换文件中的字 ...
- Python——dat文件批量合并为同一个csv文件
Python--dat文件批量合并为同一个csv文件 目的:将文件夹ZW下的所有dat文件(含子文件夹)合并,并保存到results.csv中,便于后续使用excel进行处理与分析. 代码: #!/u ...
- 基于Python的文件批量重命名(附详细过程解读)
基于Python的文件批量重命名(附详细过程解读) 0.闲言碎语 hi ~ 欢迎关注公众号"壹贰叁言"! 啥都写,图一乐哈哈! 1.前因后果 前几日,我在用arcgis处理一些数据 ...
- 使用python进行文件批量重命名
python文件重命名 最近由于要处理大量的图片文件, 从网上下载下来的图片名称各不相同, 但又有一些规律, 故而采用python对文件进行批量重命名 目的:对文件名进行简单的分割处理, 提取出图片的 ...
- python如何对文件进行批量命名-利用Python对文件批量重命名
由于要用到对无序的文件进行重命名,以下写了一个脚本,进行批量进行重命名. 基本格式是 i.后缀名 (i 循环条件下的数 ) 1 #coding:utf8 2 import os; 3 4 def re ...
- python之文件批量更名及文件名批量存储
如果self.savefilenameformat输入为空的情况下,将文件夹中的文件名下入txt文本以及其他类型文档中,在这里有两种选择模式,默认self.choosefilenameformat=2 ...
- python教程文件 txt_Python读写txt文本文件的操作方法全解析
filename = 'array_reflection_2D_TM_vertical_normE_center.txt' # txt文件和当前脚本在同一目录下,所以不用写具体路径 pos = [] ...
- json文件批量转txt
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮 将json批量提取转化为txt文件. 上图是 json文件的属性,在下面提取中 会用到这些属性. 下面直接对代码讲解: 因为由于工作需要我只 ...
最新文章
- OracleDBConsoleorcl服务无法启动问题(1053错误、发生服务特定错误2)
- f5 ddos cc——Mitigating DDoS Attacks with F5 Technology
- 员工(类的多态性实验)
- Python中的getpass模块
- 动态规划问题中找零问题 --C语言实现
- jQuery瀑布流插件 Masonry
- 详解python多进程(含示例代码)
- mysql mapinfo_MapInfo常见数据格式
- 数据库字典收集整理,设计数据表时可拿来查考
- 天大2021年秋学期考试《画法几何及工程制图》离线作业考核试题
- 分享一下我的面试和入职经历
- Codeforces 1092D1. Great Vova Wall (Version 1)
- solidworks 文件服务器,solidworks配置服务器
- 怎么给计算机上锁键盘,想把笔记本电脑的键盘锁住,用外置键盘怎样做?
- QQ邮箱中转站文件即将过期时如何转存到微云
- Meltdown Reading Kernel Memory from User Space
- 物联网开发常用的开发板_物联网开发人员简介:物联网开发人员调查的结果
- 超级简单的 RocketMQ 流量削峰实战
- 笔记本无线上网设置教程(图文)
- ubuntu安装 veloview_Pointnet+Frustum-Pointnet复现(Pytorch1.3+Ubuntu18.04)
热门文章
- Android逆向第二天
- android清理空间,安卓手机如何清理系统空间
- H5标签datalist
- 危机管理计划书模板_危机公关策划书范文_计划方案.doc
- sum多个字段的值相加_Excel Sumifs函数多字段多条件求和使用实例
- 吴伯凡-认知方法论-如何消除认知阑尾
- cpuz测试分数天梯图_怎么看CPU性能排行 CPU天梯图2018年5月最新版 (全文)
- 概率论与数理统计——总结
- ImageNet数据集编号对应的类别内容
- python re sub模块字符串提取非字母非数字_7.python之正则表达式re模块