рдиреЛрд╢рди рдФрд░ рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдПрдХ рд╣реЛрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдирд╛

рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рд╕реЗ рд░реБрдЪрд┐ рдереА рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкреБрд╕реНрддрдХреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░реВрдВред рдирддреАрдЬрддрди, рдореИрдВ рдкреГрд╖реНрдареЛрдВ рдФрд░ рдЕрдиреНрдп рдЙрдкрд╣рд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЖрдпрд╛ рдерд╛ред рдореИрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рд╕рднреА рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдкреА рдкреВрдЫрддрд╛ рд╣реВрдВред


рднрд╛рдЧ 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 

рдпрд╣ 300 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ A4 рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП WORDS_PER_PAGE рд╣реИред


рдЕрдм рдкреГрд╖реНрдареЛрдВ рдХреЛ рдЧрд┐рдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╣рдо PyPDF2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред


 def get_pdf_pages_number(path, filename): pdf = PdfFileReader(open(os.path.join(path, filename), 'rb')) return pdf.getNumPages() 

рдЕрдЧрд▓рд╛, рд╣рдо epaba рдореЗрдВ рдкреГрд╖реНрдареЛрдВ рдХреА рдЧрд┐рдирддреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА рдмрд╛рдд рд▓рд┐рдЦреЗрдВрдЧреЗред рд╣рдо epub_converter рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдкреБрд╕реНрддрдХ рд▓реЗрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╣рдо рд╢рдмреНрджреЛрдВ рдХреЛ рдЧрд┐рдирддреЗ рд╣реИрдВред


 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 

рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдкрдврд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА :)

Source: https://habr.com/ru/post/hi467009/


All Articles