рдореЗрд░реА рд╣рдореЗрд╢рд╛ рд╕реЗ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рд░реБрдЪрд┐ рд░рд╣реА рд╣реИ рдХрд┐ рдЕрдкрдиреА рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкреБрд╕реНрддрдХреЛрдВ рдХрд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рд╡рд┐рддрд░рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдкреГрд╖реНрдареЛрдВ рдФрд░ рдЕрдиреНрдп рдЙрдкрд╣рд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЖрдпрд╛ред рдореИрдВ рд╕рднреА рдЗрдЪреНрдЫреБрдХ рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реВрдВред
рднрд╛рдЧ 1. рдбреНрд░реЙрдкрдмреЙрдХреНрд╕
рдореЗрд░реА рд╕рднреА рдкреБрд╕реНрддрдХреЗрдВ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдкрд░ рд╣реИрдВред рдРрд╕реА 4 рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ: рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ, рд╕рдВрджрд░реНрдн, рдлрд┐рдХреНрд╢рди, рдиреЙрди-рдлрд┐рдХреНрд╢рдиред рд▓реЗрдХрд┐рди рдореИрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрджрд░реНрдн рдкреБрд╕реНрддрдХреЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ред
рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреБрд╕реНрддрдХреЗрдВ .epub рд╣реИрдВ, рдмрд╛рдХреА .pdf рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдк рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
рдХрд┐рддрд╛рдмреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдореЗрд░реЗ рд░рд╛рд╕реНрддреЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИрдВ:
/╨Ъ╨╜╨╕╨│╨╕/╨Э╨╡╤Е╤Г╨┤╨╛╨╢╨╡╤Б╤В╨▓╨╡╨╜╨╜╨╛╨╡/╨Э╨╛╨▓╨╛╨╡/╨Ф╨╕╨╖╨░╨╣╨╜/╨о╤А╨╕╨╣ ╨У╨╛╤А╨┤╨╛╨╜/╨Ъ╨╜╨╕╨│╨░ ╨┐╤А╨╛ ╨▒╤Г╨║╨▓╤Л ╨╛╤В ╨Р ╨┤╨╛ ╨п.epub
рдпрджрд┐ рдкреБрд╕реНрддрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╣реИ, рддреЛ рд╢реНрд░реЗрдгреА (рдЕрд░реНрдерд╛рддреН, рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдореЗрдВ "рдбрд┐рдЬрд╝рд╛рдЗрди") рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред
рдореИрдВрдиреЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдПрдкреАрдЖрдИ рд╕реЗ рдкрд░реЗрд╢рд╛рди рди рд╣реЛрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдирдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рдпреЛрдЬрдирд╛ рдпрд╣ рд╣реИ: рд╣рдо рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдкреБрд╕реНрддрдХреЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреБрд╕реНрддрдХ рдХреЛ рдПрдХ рд╢рдмреНрдж рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдиреЛрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рднрд╛рдЧ 2. рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ
рддрд╛рд▓рд┐рдХрд╛ рд╕реНрд╡рдпрдВ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП. рдзреНрдпрд╛рди рджреЗрдВ: рдХреЙрд▓рдо рдирд╛рдо рд▓реИрдЯрд┐рди рдореЗрдВ рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рд╣рдо рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рдиреЛрд╢рди рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдПрдкреАрдЖрдИ рдЕрднреА рддрдХ рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдиреЛрд╢рди рдкрд░ рдЬрд╛рдПрдВ, Ctrl + Shift + J рджрдмрд╛рдПрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди -> рдХреБрдХреАрдЬрд╝ рдкрд░ рдЬрд╛рдПрдВ, рдЯреЛрдХрди_v2 рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЯреЛрдХрди рдХрд╣реЗрдВред рдлрд┐рд░ рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рд╛рдЗрди рдХреЗ рд╕рд╛рде рдЙрд╕ рдкреЗрдЬ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ рдФрд░ рд▓рд┐рдВрдХ рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдзрд╛рд░рдгрд╛ рдХрд╣рддреЗ рд╣реИрдВ.
рдлрд┐рд░ рд╣рдо рдиреЛрдЯрд┐рдпрди рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред
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. рд╢рдмреНрджреЛрдВ, рдШрдВрдЯреЛрдВ рдФрд░ рдЕрдиреНрдп рдкреНрд░рд╕рдиреНрдирддрд╛рдУрдВ рдХреА рдЧрд┐рдирддреА рдХрд░рдирд╛
рдпреЗ рддреЛ рдФрд░ рднреА рдореБрд╢реНрдХрд┐рд▓ рдХрд╛рдо рд╣реИ. рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдкреНрд░рд╛рд░реВрдк рд╣реИрдВ: рдИрдкреАрдпреВрдмреА рдФрд░ рдкреАрдбреАрдПрдлред рдпрджрд┐ рдИрдкреАрдпреВрдмреА рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд╢рдмреНрдж рд╕рдВрднрд╡рддрдГ рд╡рд╣рд╛рдВ рд╣реИрдВ, рддреЛ рдкреАрдбреАрдПрдл рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ: рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдЪрд┐рдкрдХреА рд╣реБрдИ рдЫрд╡рд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рддреЛ рдкреАрдбреАрдПрдл рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛: рд╣рдо рдкреГрд╖реНрдареЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ (рдкреНрд░рддрд┐ рдкреГрд╖реНрда рд╢рдмреНрджреЛрдВ рдХреА рдФрд╕рдд рд╕рдВрдЦреНрдпрд╛) рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдпрд╣ рд╣реИ:
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. рд╕рднреА рднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛
рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рд╕реНрддреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдиреЛрд╢рди рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдИ рдХрд┐рддрд╛рдм рдореМрдЬреВрдж рд╣реИ: рдЕрдЧрд░ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЕрдм рдПрдХ рд▓рд╛рдЗрди рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рдлрд┐рд░ рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЧрд┐рдиреЗрдВред рдЕрдВрдд рдореЗрдВ рдПрдХ рдХрд┐рддрд╛рдм рдЬреЛрдбрд╝реЗрдВ.
рдпрд╣ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
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