我是重度Kindle使用者,Kindle里面存满了各类书籍,经常会同时读两三本书,时间一长,多本书的标注和笔记都交叉记录在My Clippings.txt文本文件里,现在这个文件已经有几万行,每次手动去整理特定的一本书的标注和笔记时都极为头疼,还容易错漏,终于有一天实在忍不了了,就去网上找有没有整理kindle标注和笔记的服务,还真让我给找到了,clipping.io,在线服务,马上使用,上传My Clippings.txt文件,一切顺利,文件上传后开始分析整理文本,看到几本书的标注已经出来了,等全部整理结束后发现少了好几本书的,再次重新上传文件重试整理,问题依旧,空欢喜一场,依旧不能解决我的痛点,最近在读的两本书的标注和笔记恰好没有被整理出来,一怒之下,决定自己用python脚本来写一个这样的整理工具,还以为得花费一两天的时间,一不小心,两个小时不到的功夫写完了,调试了一番,完全满足我的需求,现在只需一条命令,传入书名就可以整理出指定的一本书的所有标注和笔记,脚本如下:
# coding=utf-8
import os
import sys
def main():
filepath = sys.argv[1]
bookName = sys.argv[2]
if not os.path.isfile(filepath):
print("File path {} does not exist. Exiting...".format(filepath))
sys.exit()
DELIMITER = "=========="
TIME_MAKR = "- 您在第"
lineNum = 0
books = {}
bag_of_words = {}
with open(filepath) as fp:
encounter = False
delimiterCount = 0
curBookName = ""
for line in fp:
if lineNum == 0:
books[line] = []
curBookName = line
delimiterCount += 1
else:
if line.startswith(DELIMITER):
delimiterCount += 1
encounter = True
else:
if encounter == True:
if line in books:
curBookName = line
else:
books[line] = []
encounter = False
curBookName = line
else:
books[curBookName].append(line)
lineNum += 1
#print(line)
fp.close()
outFile = open("MyClippingOutput.txt", "w")
for k in books:
if k.startswith(bookName) :
outFile.writelines(k)
lines = books[k]
for l in lines:
if l.startswith(TIME_MAKR):
continue
if l.startswith(bookName):
continue
outFile.writelines(l)
outFile.close()
if __name__ == '__main__':
main()
目前这个脚本我只是自用,满足我个人的需求,我想肯定也有很多kindle的重度使用者有类似的需求,后续我准备把这个工具也做成在在线服务,使用方式类似clipping.io,做到比clipping.io的可定制型更强,能够适应更多的异常情况,因为我发现clipping.io对一些不规范的书名的容错性很差。期待这个服务上线!