提取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的.它对数据的管理也有自己的方法,而且并没有向用户提供一个统一的接口,供用户操作数据流.这里以提取视频采集在的每帧为位图 ...
随机推荐
- 用nifi executescript 生成3小时间隔字符串
import java.io from datetime import datetime from org.apache.commons.io import IOUtils from java.nio ...
- hadoop研究:mapreduce研究前的准备工作
继续研究hadoop,有童鞋问我,为啥不接着写hive的文章了,原因主要是时间不够,我对hive的研究基本结束,现在主要是hdfs和mapreduce,能写文章的时间也不多,只有周末才有时间写文章,所 ...
- Yii CModel中rules验证规则[转]
array( array(‘username’, ‘required’), array(‘username’, ‘length’, ‘min’=>3, ‘max’=>12), array( ...
- [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)
目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...
- Java基础之String、StringBuffer、StringBuilder
1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串. 生活中很多数据的描述都采用的是字符串的.而且我们还会对其进行操作. 所以,java就提供了这样的一个类供我们使用. (2) ...
- MVVM架构~knockoutjs系列之验证信息自定义输出~续
返回目录 上一讲中,我以一个实际中的例子说明了knockoutjs的自定义验证功能,在使用过程中,出现了一个问题,当然了不是问题,只是一种需求,上一讲中自定义验证的表现是:当页面加载后,自动显示有问题 ...
- 编写一个简单的C++程序
编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...
- 一直都在说反射很有用 谈谈大型.NET ERP系统有哪些地方用到了反射
反射Reflection,MFC时代叫RTTI(Runtime Type Identification) 运行时类型识别,提供一种动态创建对象的能力. 这里不谈反射的概念和基本用法,仅仅就我遇到的ER ...
- 说说null和undefined的那些事
网上有很多关于null和undefined的解释,那么今天我们也来简单的聊聊null与undefined的话题,以便解开它们的神秘面纱,当然这这是简单的介绍,在日后会有相应的更新. 为什么用==的时候 ...
- 在Windows平台上安装Node.js及NPM模块管理
1. 下载Node.js官方Windows版程序:http://nodejs.org/#download 从0.6.1开始,Node.js在Windows平台上提供了两种安装方式,一是.MSI安 ...