Dejjem kont interessat kif l-aħjar inqassam il-kotba fil-librerija elettronika tiegħi. Fl-aħħar, wasalt għal din l-għażla b'kalkolu awtomatiku tan-numru ta 'paġni u goodies oħra. Nistaqsi lill-persuni kollha interessati taħt cat.
Parti 1. Dropbox
Il-kotba tiegħi kollha jinsabu fuq dropbox. Hemm 4 kategoriji li fihom qsamt kollox: Ktieb tat-test, Referenza, Finzjoni, Mhux finzjoni. Imma ma nżidx kotba ta' referenza mat-tabella.
Ħafna mill-kotba huma .epub, il-bqija huma .pdf. Jiġifieri, is-soluzzjoni finali trid b'xi mod tkopri ż-żewġ għażliet.
It-toroq tiegħi lejn il-kotba huma xi ħaġa bħal din:
/Книги/Нехудожественное/Новое/Дизайн/Юрий Гордон/Книга про буквы от А до Я.epub
Jekk il-ktieb huwa finzjoni, allura l-kategorija (jiġifieri, "Disinn" fil-każ ta 'hawn fuq) titneħħa.
Iddeċidejt li ma niddejjaqx bl-API Dropbox, peress li għandi l-applikazzjoni tagħhom li tissinkronizza l-folder. Jiġifieri, il-pjan huwa dan: nieħdu kotba mill-folder, inmexxu kull ktieb permezz ta 'counter tal-kliem, u nżiduh ma' Notion.
Parti 2. Żid linja
It-tabella nnifisha għandha tidher xi ħaġa bħal din. ATTENZJONI: huwa aħjar li tagħmel l-ismijiet tal-kolonni bil-Latin.
Se nużaw l-API Notion mhux uffiċjali, minħabba li dik uffiċjali għadha ma ġietx ikkunsinnata.
Mur fuq Notion, agħfas Ctrl + Shift + J, mur Applikazzjoni -> Cookies, ikkopja token_v2 u sejjaħlu TOKEN. Imbagħad immorru fil-paġna li għandna bżonn bis-sinjal tal-librerija u nikkopja l-link. Aħna nsejħulu NOZZJONI.
Imbagħad niktbu l-kodiċi biex tikkonnettja ma 'Notion.
database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()
Sussegwentement, ejja nikteb funzjoni biex iżżid ringiela mat-tabella.
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
X'qed jiġri hawn. Nieħdu u żid ringiela ġdida mat-tabella fl-ewwel ringiela. Sussegwentement, naqsmu t-triq tagħna tul "/" u nġibu tags. Tags - f'termini ta '"Arti", "Disinn", min huwa l-awtur, eċċ. Imbagħad waqqafna l-oqsma kollha meħtieġa tal-pjanċa.
Parti 3. Għadd ta’ kliem, sigħat u pjaċiri oħra
Dan huwa kompitu aktar diffiċli. Kif niftakru, għandna żewġ formati: epub u pdf. Jekk kollox huwa ċar bl-epub - il-kliem x'aktarx hemm, allura kollox mhux daqshekk ċar dwar il-pdf: jista 'sempliċement jikkonsisti minn stampi inkollati.
Allura l-funzjoni tagħna għall-għadd tal-kliem f'PDF se tidher bħal din: nieħdu n-numru ta 'paġni u mmultiplikaw b'ċerta kostanti (in-numru medju ta' kliem għal kull paġna).
Hawn hi:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGE
Din il-WORDS_PER_PAGE għal paġna A4 hija madwar 300.
Issa ejja niktbu funzjoni biex tgħodd il-paġni. Aħna se nużaw
def get_pdf_pages_number(path, filename):
pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
return pdf.getNumPages()
Sussegwentement, aħna ser niktbu ħaġa għall-għadd tal-paġni fl-Epub. Aħna nużaw
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)
Issa ejja nikkalkulaw il-ħin. Nieħdu l-għadd tal-kliem favorit tagħna u naqsmuh bil-veloċità tal-qari tiegħek.
def get_reading_time(words_count):
return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10
Parti 4. Tqabbad il-partijiet kollha
Irridu ngħaddu mill-mogħdijiet kollha possibbli fil-folder tal-kotba tagħna. Iċċekkja jekk diġà hemmx ktieb f'Notion: jekk hemm, m'għadniex bżonn noħolqu linja.
Imbagħad irridu niddeterminaw it-tip ta 'fajl, skont dan, għodd in-numru ta' kliem. Żid ktieb fl-aħħar.
Dan huwa l-kodiċi li nġibu:
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)
U l-funzjoni biex tiċċekkja jekk ktieb ġiex miżjud tidher bħal din:
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
Konklużjoni
Grazzi lil kull min qara dan l-artiklu. Nispera li jgħinek taqra aktar :)
Sors: www.habr.com