Advertisement
FranzVuttke

getrti_new.py

Nov 20th, 2023 (edited)
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.89 KB | Source Code | 0 0
  1. #!/home/ounis/pyapps/virtual_env/getrti/bin/python
  2.  
  3. # by OuNiS 04.2023
  4. # wyciągane do schowka tekstu z pliku .pdf
  5. #
  6. # moduły:
  7. # pyperclip https://pypi.org/project/pyperclip/
  8. # pyPdf https://pypi.org/project/pypdf/
  9. # tqdm https://pypi.org/project/tqdm/
  10.  
  11. import sys
  12. import os
  13. import argparse
  14. from time import sleep
  15.  
  16. import pyperclip
  17. from pypdf import PdfReader
  18. from tqdm import tqdm
  19.  
  20. TEXT_2_FIND = "abonamentowa za"
  21. WIATRACZEK = ["-", "\\", "|", "/", "-","\\", "|", "/"]
  22. # WIATRACZEK = [".", "o", "O", "o"]
  23.  
  24. def arguments():
  25.     parser = argparse.ArgumentParser(prog="getrti.py", description="szuka frazy w pliku .pdf")
  26.     parser.add_argument("filename",help="plik .pdf")
  27.     parser.add_argument("text_2_find", help="szukana fraza")
  28.  
  29.     return parser.parse_args()
  30.  
  31.  
  32.  
  33. def main(args):
  34.  
  35.     # w razie błęddu z pyperclip:
  36.     # https://pyperclip.readthedocs.io/en/latest/index.html#not-implemented-error
  37.     # pyperclip.copy("SURFACE!!!")
  38.     # print(pyperclip.paste())
  39.  
  40.     # parser = argparse.ArgumentParser(prog="getrti.py", description="szuka frazy w pliku .pdf")
  41.     # parser.add_argument("filename",help="plik .pdf")
  42.     # parser.add_argument("text_2_find", help="szukana fraza")
  43.  
  44.     # args = parser.parse_args()
  45.  
  46.     args = arguments()
  47.  
  48.  
  49.     filename = args.filename
  50.     text_2_find = args.text_2_find
  51.     founded_texts = []
  52.     if os.path.isfile(filename):
  53.         print("\nOtwieranie pliku: %s" % filename)
  54.         reader = PdfReader(filename)
  55.         number_of_pages = len(reader.pages)
  56.  
  57.         print("\nIlość stron w dokumencie: %d" % number_of_pages)
  58.         print(f"Wyszukiwana fraza: \"{text_2_find}\"\n")
  59.  
  60.         #for p_num, page in tqdm(enumerate(reader.pages,1), total=number_of_pages):
  61.  
  62.  
  63.         for p_num, page in enumerate(reader.pages,1):
  64.  
  65.             text = page.extract_text()
  66.             lines = text.split("\n")
  67.             # print("\nStrona %d" % p_num)
  68.             # print("Ilość linii na stronie: %d" % len(lines))
  69.             # print("Tytuł(y) przelewów:")
  70.             sys.stdout.write('Wyszukiwanie... {0}\r'.format(WIATRACZEK[p_num % len(WIATRACZEK)]))
  71.             sys.stdout.flush()
  72.             # opóźnieni do testów
  73.             # sleep(.011)
  74.             for line_num, line in enumerate(lines, 1):
  75.                 if line.find(text_2_find) > -1:
  76.  
  77.                     '''
  78.                    { "line" : <str>,
  79.                       "page_num" : <int>,
  80.                       "line_num_on_page" : <int>
  81.                    }
  82.                    '''
  83.                     founded_texts.append({"line":line, "page_num":p_num, "line_num_on_page":line_num})
  84.                     # founded_texts.append([line, p_num, line_num])
  85.                     print("\a", end="")
  86.                     print(flush=True, end="")
  87.                     # found = True
  88.                     # print("\tznaleziono: '%s' na stronie: %d" % (line, p_num))
  89.                     # answ = input("Akcja: ([s] - skopiuj, [q] - zakończ, [ENTER] - dalej)?: ").lower()
  90.                     # # answ = answ.lower()
  91.                     # match answ:
  92.                     #     case "s":
  93.                     #     # if answ.lower() == "s":
  94.                     #         found = True
  95.                     #         pyperclip.copy(line)
  96.                     #         print("Skopiowano...")
  97.                     #         continue
  98.                     #     case "q":
  99.                     #     # if answ.lower() == "q":
  100.                     #         break_main_loop = True
  101.                     #         break
  102.         # list pusta? nic nie znaleziono...
  103.         if not founded_texts :
  104.             print("\n\t - brak, nie znaleziono wzorca: '%s'" % text_2_find)
  105.         else:
  106.             print()
  107.             print("Znalezione frazy: ")
  108.             '''
  109.            line_info is a list of dicts like that:
  110.            { "line" : <str>,
  111.               "page_num" : <int>,
  112.               "line_num_on_page" : <int>
  113.            }
  114.            '''
  115.             for id, line_info in enumerate(founded_texts, 1):
  116.                 print(f'\t{id}. {line_info.get("line")}, \n\t\tstrona {line_info.get("page_num")}, linia {line_info.get("line_num_on_page")}')
  117.             print(f"Wybierz numer w celu skopiowania do schowka(1 - {len(founded_texts)}) (q - koniec) ")
  118.             while (True):
  119.                 answ = input(">")
  120.                 if answ.isalpha() and answ in ["q", "Q"]:
  121.                     break
  122.                 elif answ.isnumeric():
  123.                     num = int(answ)-1
  124.                     if num in range(len(founded_texts)):
  125.                         pyperclip.copy(founded_texts[num].get("line"))
  126.                         print("Skopiowane...")
  127.                         break
  128.     else:
  129.         print("ERR: plik: '%s' nie istnieje!!!" % filename)
  130.  
  131.  
  132.  
  133. # if "main" in dir():
  134. if __name__ == "__main__":
  135.     sys.exit(main(sys.argv))
  136. # else:
  137. #     print("ERR: no main() func. to execute...")
  138.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement