我一直對如何最好地在我的電子圖書館中分發書籍感興趣。 最後,我選擇了這個選項,自動計算頁數和其他好處。 我詢問貓下所有有興趣的人。
第 1 部分:Dropbox
我所有的書都在保管箱上。 我將所有內容分為 4 類:教科書、參考書、小說、非小說。 但我不會在桌子上添加參考書。
大多數書籍都是 .epub,其餘的都是 .pdf。 也就是說,最終的解決方案必須以某種方式涵蓋這兩個選項。
我的讀書之路是這樣的:
/Книги/Нехудожественное/Новое/Дизайн/Юрий Гордон/Книга про буквы от А до Я.epub
如果這本書是小說,則刪除該類別(即上例中的「設計」)。
我決定不再使用 Dropbox API,因為我有他們的應用程式來同步資料夾。 也就是說,計劃是這樣的:我們從資料夾中取出書籍,透過字數計數器運行每本書,並將其添加到 Notion 中。
第 2 部分:新增一行
桌子本身應該看起來像這樣。 注意:最好用拉丁文命名列名。
我們將使用非官方的 Notion API,因為官方尚未發布。
轉到 Notion,按 Ctrl + Shift + J,轉到應用程式 -> Cookies,複製 token_v2 並將其命名為 TOKEN。 然後我們進入我們需要的帶有圖書館標誌的頁面並複製連結。 我們稱之為「NOTION」。
然後我們編寫連接Notion的程式碼。
database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()
接下來,讓我們寫一個函數來在表中新增一行。
def add_row(path, file, words_count, pages_count, hours):
row = database.collection.add_row()
row.title = file
tags = path.split("/")
if len(tags) >= 1:
row.what = tags[0]
if len(tags) >= 2:
row.state = tags[1]
if len(tags) >= 3:
if tags[0] == "Художественное":
row.author = tags[2]
elif tags[0] == "Нехудожественное":
row.tags = tags[2]
elif tags[0] == "Учебники":
row.tags = tags[2]
if len(tags) >= 4:
row.author = tags[3]
row.hours = hours
row.pages = pages_count
row.words = words_count
這裡發生了什麼事。 我們在表格的第一行中新增一個行。 接下來,我們沿著“/”分割路徑並取得標籤。 標籤——「藝術」、「設計」、作者是誰等等。 然後我們設置該板的所有必要字段。
第 3 部分:計算字數、時間和其他樂趣
這是一項更艱鉅的任務。 我們記得,我們有兩種格式:epub 和 pdf。 如果 epub 的一切都很清楚 - 文字可能就在那裡,那麼 pdf 的一切就不那麼清楚了:它可能只是由黏合圖像組成。
因此,我們計算 PDF 字數的函數將如下所示:我們取得頁數並乘以某個常數(每頁的平均字數)。
她在這:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGE
A4 頁的 WORDS_PER_PAGE 大約為 300。
現在讓我們寫一個函數來計算頁數。 我們將使用
def get_pdf_pages_number(path, filename):
pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
return pdf.getNumPages()
接下來,我們將編寫一個用於計算 Epub 中頁數的東西。 我們用
def get_epub_pages_number(path, filename):
book = open_book(os.path.join(path, filename))
lines = convert_epub_to_lines(book)
words_count = 0
for line in lines:
words_count += len(line.split(" "))
return round(words_count / WORDS_PER_PAGE)
現在我們來計算一下時間。 我們將我們最喜歡的字數除以您的閱讀速度。
def get_reading_time(words_count):
return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10
第 4 部分:連接所有部件
我們需要遍歷 books 資料夾中所有可能的路徑。 檢查Notion中是否已經有一本書:如果有,我們就不再需要建立一行。
然後我們需要判斷文件類型,根據這個,統計字數。 最後添加一本書。
這是我們得到的程式碼:
for root, subdirs, files in os.walk(BOOKS_DIR):
if len(files) > 0 and check_for_excusion(root):
for file in files:
array = file.split(".")
filetype = file.split(".")[len(array) - 1]
filename = file.replace("." + filetype, "")
local_root = root.replace(BOOKS_DIR, "")
print("Dir: {}, file: {}".format(local_root, file))
if not check_for_existence(filename):
print("Dir: {}, file: {}".format(local_root, file))
if filetype == "pdf":
count = get_pdf_pages_number(root, file)
else:
count = get_epub_pages_number(root, file)
words_count = get_words_count(count)
hours = get_reading_time(words_count)
print("Pages: {}, Words: {}, Hours: {}".format(count, words_count, hours))
add_row(local_root, filename, words_count, count, hours)
檢查是否已新增書籍的函數如下所示:
def check_for_existence(filename):
for row in current_rows:
if row.title in filename:
return True
elif filename in row.title:
return True
return False
結論
感謝所有閱讀這篇文章的人。 我希望它能幫助你閱讀更多:)
來源: www.habr.com