整体思路

  • 目标:将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中每本书的笔记并单独保存的更多相关文章

  1. python笔记之提取网页中的超链接

    python笔记之提取网页中的超链接 对于提取网页中的超链接,先把网页内容读取出来,然后用beautifulsoup来解析是比较方便的.但是我发现一个问题,如果直接提取a标签的href,就会包含jav ...

  2. python学习笔记——爬虫中提取网页中的信息

    1 数据类型 网页中的数据类型可分为结构化数据.半结构化数据.非结构化数据三种 1.1 结构化数据 常见的是MySQL,表现为二维形式的数据 1.2 半结构化数据 是结构化数据的一种形式,并不符合关系 ...

  3. NodeJS写个爬虫,把文章放到kindle中阅读

    这两天看了好几篇不错的文章,有的时候想把好的文章 down 下来放到 kindle 上看,便写了个爬虫脚本,因为最近都在搞 node,所以就很自然的选择 node 来爬咯- 本文地址:http://w ...

  4. 【前端】提取URL中的各个GET参数

    /**************************** * 有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xx ...

  5. C++ 提取字符串中的数字

    C++ 提取字符串中的数字 #include <iostream> using namespace std; int main() { ] = "1ab2cd3ef45g&quo ...

  6. 在线提取PDF中图片和文字

    无需下载软件,你就可以在线提取PDF中图片和文字,http://www.extractpdf.com/不仅可以获取本地PDF文档的图片和文字,还能获取远程PDF文档的图片和文字.如下图所示:结果本人测 ...

  7. 使用Perl提取Excel中的IO_MUX

    使用Perl提取Excel中的IO_MUX 关键问题 提取数据 格式化输出 循环嵌套 数据结构构建 坐标映射,逆向提取关键字 描述 在IC集成中,我们使用Excel表格规划设计的IC引脚功能映射需要转 ...

  8. java正则表达式提取地址中的ip和端口号

    由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...

  9. 提取DirectShow中视频采集的数据

    DirectShow中,数据流(Data Flow)都是依次流过各个Filter的.它对数据的管理也有自己的方法,而且并没有向用户提供一个统一的接口,供用户操作数据流.这里以提取视频采集在的每帧为位图 ...

随机推荐

  1. Silverlight无法启动调试,错误“Unable to start debugging. The Silverlight Developer Runtime is not installed. Please install a matching version.” 解决办法

    今天调试Silverlight出现了以下错误: 意思是“无法启动调试,因为Silverlight Developer Runtime没有安装,请安装一个匹配的版本”.但是按Ctrl + F5可以调试运 ...

  2. HOOK技术的一些简单总结

    好久没写博客了, 一个月一篇还是要尽量保证,今天谈下Hook技术. 在Window平台上开发任何稍微底层一点的东西,基本上都是Hook满天飞, 普通应用程序如此,安全软件更是如此, 这里简单记录一些常 ...

  3. WaterfallTree(瀑布树) 详细技术分析系列

    前言 WaterfallTree(瀑布树) 是最强纯C#开源NoSQL和虚拟文件系统-STSdb专有的(版权所有/专利)算法/存储结构. 参考 关于STSdb,我之前写过几篇文章,譬如: STSdb, ...

  4. 怎样记住Integer的最大值(有趣的思维和搞笑的回答)

    前言 今天一个同事问我,数据库里面的某表如果用int做PK,那该表最多可以放多少记录,我说简单啊,就是2^31(正数),跟.NET的Int32.MaxValue一样,约等于20亿(正数)吧.同事说,那 ...

  5. 据说每个大牛、小牛都应该有自己的库——DOM处理

    这几天整理了一下思路,本来觉得DOM部分会有很多东西,但是忽然发现频繁使用的其实并不太多 class class处理部分主要有四个 hasClass:检查元素是否包含某个class addClass: ...

  6. java.logging的重定向?

    接着昨天的工作. 上面说要重定向java.util.logging.Logger的输出, 发现也不是不可能. package jmx; import java.util.logging.FileHan ...

  7. java.rmi.NoSuchObjectException: no such object in table

    jmx链接的时候,最简单的例子都行不通,郁闷,出现了: 参考:http://reiz6153.blog.163.com/blog/static/401089152009442723208/ 代码: M ...

  8. Atitit 混合叠加俩张图片的处理 图像处理解决方案 javafx blend

    Atitit 混合叠加俩张图片的处理 图像处理解决方案 javafx blend 1.1. Jhlabs 好像有了可以叠加算法,但是没有找到doc1 1.2. 自己算法叠加1 1.3. 使用javaf ...

  9. 每天一个linux命令(34):du 命令

    Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...

  10. TSql Output 用法

    第一部分:TSql Output 关键字有两种应用场景 1,作为存储过程的参数类型,从存储过程中返回数据 2,返回受 INSERT.UPDATE.DELETE 或 MERGE 语句影响的各行中的信息, ...