最近入手了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是否与计算机连接')