Kindle电子书整理脚本

最近入手了Kindle PaperWhite3,用来压泡面盖子(手动狗头)。
贫穷限制了我在Amazon购买书籍,所以要找到书籍资源下载后导入Kindle。资源嘛,不要问我从哪里找的。
我的资源下载后是这样的:
在这里插入图片描述
尝试了一下用邮件传输,发现并不是很好用,所以还是选择了usb连接后拷贝文件。我的目标是写个脚本,自动处理这个文件夹中的文件,并将书拷贝到Kindle的指定文件夹中。shell脚本我并不是太熟,所以选择了用Python。

首先,将所有.mobi格式的书籍移出子目录到书籍目录中:

#递归遍历当前文件夹
for r, d, f in os.walk('.'):
    #只处理文件夹中文件
    if(r.startswith('./')):
        for each in f:
            #将.mobi文件移动到当前目录
            if(each.endswith('mobi')):
                path = os.path.join(r, each)
                shutil.move(path, src_path)

然后,递归删除本目录中所有文件夹:

#删除不需要的文件夹,以及其中的文件
#删除完毕后,本文件夹中便不存在文件夹
for f in os.listdir(src_path):
    if(os.path.isdir(f)):
        shutil.rmtree(f)

再之,去掉文件名前面的时间戳,给这些书籍格式化一下文件名:

books_src = (f for f in os.listdir(src_path) if f.endswith('mobi'))
#去除书籍名称前面的时间戳
for book in books_src:
    prefix, name = re.search('(\d+?-\d+\s*)?(.*)', book).groups()
    #只给有时间戳的文件更名
    if(prefix != None):
        #使用move,保证目录中不会有重复书籍
        shutil.move(book, name)```

最后,将电子书文件拷贝至Kindle:

#开始导入书籍
try:
    books_src = set(f for f in os.listdir(src_path) if f.endswith('mobi'))
    books_dst = set(f for f in os.listdir(dst_path) if f.endswith('mobi'))
    books = books_src - books_dst
    #将待导入书籍拷贝至Kindle相应目录
    print('目标文件夹是', dst_path)
    for i, book in enumerate(books):
        shutil.copy(book, dst_path)
        print('\t%d. 成功拷贝%s 至目标文件夹'%(i+1, book))
    if(len(books) == 0):
        print('当前文件夹的书籍都已经在目标文件夹啦!')
    else:
        print('整理书籍完毕, 共整理%d本书'%(len(books)))
except FileNotFoundError:
    print('检查Kindle是否与计算机连接')

运行后的当前文件夹:
在这里插入图片描述
如果能访问Kindle的文件夹的话,文件就已经复制过去了。

贴一下完整的代码,程序并不难,只是单纯防止代码被误删:

#============================================================
# Create Time:			2019-08-05 20:45:32
# Last modify:			2019-08-05 21:56:36
# Writer:				Wenhao	1795902848@qq.com
# File Name:			BooksWork.py
# File Type:			PY Source File
# Tool:					Mac -- vim & python
# Information:          将下载的书籍整理,并拷贝至Kindle中
#============================================================
#coding=utf-8
import re
import os
import shutil

#如果代码有bug,有可能误删掉自己,所以运行前先拷贝自己。
shutil.copy('BooksWork.py', '/Users/apple/Documents/Coding/Python/')

print('程序开始')
src_path = '/Users/apple/Documents/书籍/'
dst_path = '/Volumes/Kindle/documents/我的书籍/'

#递归遍历当前文件夹
for r, d, f in os.walk('.'):
    #只处理文件夹中文件
    if(r.startswith('./')):
        for each in f:
            #将.mobi文件移动到当前目录
            if(each.endswith('mobi')):
                path = os.path.join(r, each)
                shutil.move(path, src_path)

#删除不需要的文件夹,以及其中的文件
#删除完毕后,本文件夹中便不存在文件夹
for f in os.listdir(src_path):
    if(os.path.isdir(f)):
        shutil.rmtree(f)

books_src = (f for f in os.listdir(src_path) if f.endswith('mobi'))
#去除书籍名称前面的时间戳
for book in books_src:
    prefix, name = re.search('(\d+?-\d+\s*)?(.*)', book).groups()
    #只给有时间戳的文件更名
    if(prefix != None):
        #使用move,保证目录中不会有重复书籍
        shutil.move(book, name)

#开始导入书籍
try:
    books_src = set(f for f in os.listdir(src_path) if f.endswith('mobi'))
    books_dst = set(f for f in os.listdir(dst_path) if f.endswith('mobi'))
    books = books_src - books_dst
    #将待导入书籍拷贝至Kindle相应目录
    print('目标文件夹是', dst_path)
    for i, book in enumerate(books):
        shutil.copy(book, dst_path)
        print('\t%d. 成功拷贝%s 至目标文件夹'%(i+1, book))
    if(len(books) == 0):
        print('当前文件夹的书籍都已经在目标文件夹啦!')
    else:
        print('整理书籍完毕, 共整理%d本书'%(len(books)))
except FileNotFoundError:
    print('检查Kindle是否与计算机连接')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值