通过游戏学python的书_游戏通关,电影看完,是时候用Python整理下电子书了
象小编这样喜欢收集电子书的人应该不在少数吧,存了好几个G的电子书,却从来想不起去看。每次看到新出的书又忍不住下载,下载完就感觉好象已经看完了!
于是电子书越来越多,都不知道是什么书了。其实象epub这种文件本身就包含了书名和作者信息。用任何压缩软件都可以解压打开,会找到一个content.opf文件,里面的dc:title标签里就是书名,dc:creator通常是作者名
...
桐华
...
最美的时光
...
当然我们不会傻到每个epub文件都去解压去查信息。用Python不用解压就直接读取epub文件,然后取出信息就好了。
class EpubFile:
title = ""
creator = ""
content = ""
def __init__(self, file):
self.file = file
if zipfile.is_zipfile(file):
book = zipfile.ZipFile(file)
for f in book.filelist:
if '.opf' in f.filename: #有些epub不一定拥有content.opf, 可能叫package.opf
self.extract_meta()
opf文件是一个标准的xml, 我们用lxml加xpath就可以读出需要的信息。因为dc:title 需要namespace, 直接用上面例子里的
xmlns:dc="http://purl.org/dc/elements/1.1/"
方法如下
def extract_meta(self):
if self.content != "":
title = self.content.xpath('//dc:title', namespaces={'dc': "http://purl.org/dc/elements/1.1/"})
creator = self.content.xpath('//dc:creator', namespaces={'dc': "http://purl.org/dc/elements/1.1/"})
if len(title) > 0:
self.title = title[0].text
if len(creator) > 0:
self.creator = creator[0].text
拿到作者名和书名后就可以为所欲为了, 小编的作法是作者名为目录,用书名作文件名。这样的好处是如果有的书是一章一个文件的就可以存在同一目录了。
def rename(self, move_to_author_folder=False, top_folder=None):
if len(self.title) > 0:
print(f"{self.title}-{self.creator}")
try:
new_file = self.title.translate({ord(x): '' for x in '\/:*?"<>|'})
folder = os.path.dirname(self.file)
if move_to_author_folder:
new_folder = self.creator.translate({ord(x): '' for x in '\/:*?"<>|'})
if top_folder:
new_folder = os.path.join(top_folder, new_folder)
else:
new_folder = os.path.join(folder, new_folder)
if not os.path.exists(new_folder):
os.mkdir(new_folder)
shutil.move(self.file, os.path.join(new_folder, new_file + ".epub"))
else:
shutil.move(self.file, os.path.join(folder, new_file + ".epub"))
except Exception as e:
print(e)
else:
print(f"============== {self.file} do not have metadata ==========")
注意IO操作都是很容易出错的,用try..except是比较安全,而且不会影响后续操作。
书名中可能包含不适合做文件名的非法字符,比如‘/:*?"<>|’, 这个用translate方法可以删除。
top_folder是用来递归的,象三层以上的文件夹,如果再加作者名做目录,嵌套就比较多了,容易出现重复文件,所以都移到顶层目录为好。
递归操作如下,非科班出身的同学注意下,就是函数调用本身, 只不过参数换成下一级目录了def process_dir(folder, top_folder):
for file in os.listdir(folder):
file_path = os.path.join(folder, file)
if os.path.isdir(file_path):
process_dir(file_path, top_folder)
else:
if file.endswith(".epub"):
print(f"parsing {file}")
book = EpubFile(file_path)
book.rename(move_to_author_folder=True, top_folder=top_folder)
处理完了,文件夹非常清爽,可以安心去看电影书了
通过游戏学python的书_游戏通关,电影看完,是时候用Python整理下电子书了相关推荐
- 神雕侠侣2显示不了服务器,神雕侠侣2游戏进不去怎么办_游戏进不去解决方法推荐...
神雕侠侣2游戏进不去怎么办_游戏进不去解决方法推荐 时间:2020-08-05 12:04:35 责任编辑:花降 大小:1164.43MB 语言:中文 平台:安卓 <神雕侠侣2>手游7月2 ...
- python去除中间空格只留一个_汇总初学Python的21个操作难点,看完别再去踩坑了...
初学Python时,不管是容易的操作难点,还是困难的操作难点,都是要一步步的去踩坑摸索得出结果,小编今天就给大家汇总初学时Python的21个操作难点,看完之后可别再去掉到同样的坑里去了. 1 查找当 ...
- python计算图解_图解NumPy,看这一篇就够了!
晓查 编译整理 量子位 报道 | 公众号 QbitAI NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具.然而对初学者来说,NumPy的大量运算方法非常难记. 最近,国 ...
- python语法基础学习-Python基础语法精心总结!看完都知道的可以往下继续学习了...
原标题:Python基础语法精心总结!看完都知道的可以往下继续学习了 这应该是最详细的Python入门基础语法总结! 定义变量,使用变量 1. input 用户自己输入值 2. print 打印值 可 ...
- 适合小学生python的书_小学生开始学Python,最接近AI的编程语言:安利一波Python书单...
原标题:小学生开始学Python,最接近AI的编程语言:安利一波Python书单 AlphaGo 都在使用的 Python 语言,是最接近 AI 的编程语言. 教育部考试中心近日发布了"关于 ...
- 怎么用python做战斗机_少儿编程分享:手把手教你用Python编写战斗机游戏(四)
游戏分享:手把手教你用Python编写 战斗机游戏(四) 2018.1.25 飞机大战就到这里啦 你的飞机大战做出来了吗 加入图像 现在我们已经能够玩游戏了,但这个游戏丑确实有点丑.接下来,我们要把单 ...
- 3d数学基础:图形和游戏开发(第2版)_游戏引擎编程需要哪些基本数学知识?
现今,想要从头写一个功能强大的3D引擎,个人的力量恐怕难以胜任,即使能力足够,时间恐怕也不允许.在这个美好的开源时代,你只需具备修改各种引擎的能力便足以满足开发游戏的各项需求.现代游戏引擎的复杂级别已 ...
- 安卓游戏开发用什么引擎_游戏开发学习第一天————用什么软件
今天开始了虚幻学习的第一天! 好的,那我们就开始学习做游戏吧! 始学习做游戏吧 学习做游戏吧 习做游戏吧 做游戏吧 游戏吧 戏吧 吧 等等,要学做游戏啊...... 第一步要做什么,我还完全不知道啊喂 ...
- python动物书_图灵出品的人气O'Reilly动物书,你更钟意哪本?
今天七夕,咱们图灵教育的微信又赠书了,两拨哦~ 送<计算机程序设计的艺术>(TAOCP)(含卷1和卷2,中英文版任选)了,活动截止到10号零点,点击链接赶紧去微信留言吧. 送挑3个人送书单 ...
最新文章
- feign调用如何传递token_走进Spring Cloud之五 eureka Feign(服务调用者)
- 由浅入深解读Redis高级能力及性能调优
- Android自定义View探索—生命周期
- 构建知识图谱,让自己更值钱
- 基于SignalR实现B/S系统对windows服务运行状态的监测
- 光纤收发器的优势介绍
- ~~Trie树(数据结构)(附题目:AcWing 835. Trie字符串统计)
- 特殊Office Communicator 2007 R2 Outlook集成错误
- java null转string_java null强转string
- h5页面如何预览excel文件_在网页中预览word和excel
- 机器学习数学基础二:泰勒公式与拉格朗日
- 项目投资价值分析-净现值法(NPV)、内部回报率法(IRR)与等额年金法
- 新技能get!用 Python 高效背单词!
- Navicat Premium的下载及安装
- jsp对象的四大作用域的简单介绍
- 用html代码制作一个表情图片,canvas绘制一个常用的emoji表情
- php1蛋白质带电情况,结合蛋白质(1)
- 存储圈装逼必上TOP 10网站
- 复选框 el-checkbox选不上
- 华为荣耀10作为安卓手机程序开发真机
热门文章
- 学习笔记:MySQL高阶知识体系(下)——索引、锁、日志、隔离级别与MVCC
- 一个C#函数学完C#图形图像编程基础
- round函数怎么用oracle,oracle round函数的使用方法
- ens33没有ip地址,linux重启虚拟机网络服务出现异常
- java nltk,使用NLTK将Tokenizer组合成语法和解析器
- VR全景+汽车,打造汽车销售新模式
- 2019年LOL服务器维护,英雄联盟10月24日更新维护几点结束 2019LOL9.21版本更新维护开服时间...
- Python 脚本如何设置试用期
- 游戏的分类(光盘版和硬盘版)
- ajax 调用java类_在ajax中调用java方法