提取KIndle中每本书的笔记并单独保存
整体思路
- 目标:将Kindle中的每本书的笔记标注单独提取出保存为一个Markdown文件

其中检测KIndle是否已经正常插入的判断方法:
- 思路1:读取媒介挂载记录
- 思路2:直接判断挂载地址是否存在
实现的时候用的第二个思路,Kindle的挂载路径为/media/当前用户名/Kindle,只需判断这个地址是否存在且能进入正常进行读取操作即可
其中对于信息提取,My Clippings.txt中内容格式如下
书名 作者
标注/笔记所在位置 时间
空行
笔记/标注内容
==========
每一条笔记都由十个=号进行分割。这样就很容易将内容分开了。

代码实现
#!/usr/bin/env python
# encoding: utf-8
import os
import getpass
class KindleExtract():
def __init__(self):
pass
def kindle_check(self):
"""检测Kindle的Clippings文件"""
username = getpass.getuser()
kindle_path = ""
try:
if 'Kindle' in os.listdir("/media/"+username):
kindle_path = "/media/"+username+"/Kindle"
print u"检测到您的Kindle"
else:
print u"未检测到您的Kindle设备,请确认插入正确再运行本脚本"
exit(1)
if "My Clippings.txt" in os.listdir(kindle_path+"/documents"):
kindle_path = kindle_path+"/documents/My Clippings.txt"
print u"检测到标注信息所在文件"
else:
print u"未检测到标注信息文件"
exit(2)
except Exception, e:
print e
return kindle_path
def get_data(self,kindle_path=None):
result ={}
book=[]
item=[]
with open(kindle_path) as f:
for i,cont in enumerate(f.readlines()):
cont = cont.strip()
if "==========" == cont:
book.append(item)
item = []
continue
# if cont != "":
item.append(cont)
caption = []
for i in book:
caption.append(i[0])
caption = set(caption)
tmp ={}
for i in caption:
tmp[i] = []
for i in book:
tmp[i[0]].append(i[3])
for i in tmp:
c = str(i).split(" ")
title = c[0]
print title
author = " ".join(c[1:])
with open(i.replace("/","·")+".md","w") as out_file:
out_file.write("# 书名:《《"+title+"》》\n")
out_file.write("> 作者:《《"+author+"\n")
for id,item in enumerate(tmp[i]):
out_file.write("+ %s%s\n"%(id,item))
if __name__ == "__main__":
ke = KindleExtract()
ke.get_data(kindle_path="clip.txt")
诸多不完善
提取KIndle中每本书的笔记并单独保存的更多相关文章
- python笔记之提取网页中的超链接
python笔记之提取网页中的超链接 对于提取网页中的超链接,先把网页内容读取出来,然后用beautifulsoup来解析是比较方便的.但是我发现一个问题,如果直接提取a标签的href,就会包含jav ...
- python学习笔记——爬虫中提取网页中的信息
1 数据类型 网页中的数据类型可分为结构化数据.半结构化数据.非结构化数据三种 1.1 结构化数据 常见的是MySQL,表现为二维形式的数据 1.2 半结构化数据 是结构化数据的一种形式,并不符合关系 ...
- NodeJS写个爬虫,把文章放到kindle中阅读
这两天看了好几篇不错的文章,有的时候想把好的文章 down 下来放到 kindle 上看,便写了个爬虫脚本,因为最近都在搞 node,所以就很自然的选择 node 来爬咯- 本文地址:http://w ...
- 【前端】提取URL中的各个GET参数
/**************************** * 有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xx ...
- C++ 提取字符串中的数字
C++ 提取字符串中的数字 #include <iostream> using namespace std; int main() { ] = "1ab2cd3ef45g&quo ...
- 在线提取PDF中图片和文字
无需下载软件,你就可以在线提取PDF中图片和文字,http://www.extractpdf.com/不仅可以获取本地PDF文档的图片和文字,还能获取远程PDF文档的图片和文字.如下图所示:结果本人测 ...
- 使用Perl提取Excel中的IO_MUX
使用Perl提取Excel中的IO_MUX 关键问题 提取数据 格式化输出 循环嵌套 数据结构构建 坐标映射,逆向提取关键字 描述 在IC集成中,我们使用Excel表格规划设计的IC引脚功能映射需要转 ...
- java正则表达式提取地址中的ip和端口号
由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...
- 提取DirectShow中视频采集的数据
DirectShow中,数据流(Data Flow)都是依次流过各个Filter的.它对数据的管理也有自己的方法,而且并没有向用户提供一个统一的接口,供用户操作数据流.这里以提取视频采集在的每帧为位图 ...
随机推荐
- Linux 网络编程(多路复用)
服务器端代码 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<sys/soc ...
- Javascript事件机制兼容性解决方案
本文的解决方案可以用于Javascript native对象和宿主对象(dom元素),通过以下的方式来绑定和触发事件: 或者 var input = document.getElementsByTag ...
- PSP
PSP2.1 Time(%) Planning 10 l Estimate 10 Development 90 l Analysis 10 l Design Spec 5 l Design Revie ...
- 走进AngularJs(八) ng的路由机制
在谈路由机制前有必要先提一下现在比较流行的单页面应用,就是所谓的single page APP.为了实现无刷新的视图切换,我们通常会用ajax请求从后台取数据,然后套上HTML模板渲染在页面上,然而a ...
- 自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药
自制Unity小游戏TankHero-2D(5)声音+爆炸+场景切换+武器弹药 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...
- 使用OData技术遇到的问题及解决办法
“System.NotSupportedException”类型的未经处理的异常在 Microsoft.Data.Services.Client.dll 中发生 其他信息: 对此 POST 请求的响应 ...
- ios UIView sizeToFit sizeThatFits
UILabel *testLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 50, 0, 0)]; testLabel.backgroundC ...
- 项目管理师prince2
项目管理师prince2 PRINCE2并不适合用于管理商业活动中的日常事物.商业日常事务通常是指组织机构日常运营中需要完成的那些工作.例如,公司it系统的维护,宾馆的房间整理,或者运营公司的客户呼叫 ...
- EF架构~基于EF数据层的实现
回到目录 之前写过关于实现一个完整的EF架构的文章,文章的阅读量也是满大的,自己很欣慰,但是,那篇文章是我2011年写的,所以,技术有些不成熟,所以今天把我的2014年写的EF底层架构公开一下,这个架 ...
- Atitit rgb yuv hsv HSL 模式和 HSV(HSB) 图像色彩空间的区别
Atitit rgb yuv hsv HSL 模式和 HSV(HSB) 图像色彩空间的区别 1.1. 色彩的三要素 -- 色相.明度.纯度1 1.2. YUV三个字母中,其中"Y&quo ...