Business Case:
Otrzymujemy folder pełen plików PDF, które są bardzo podobne do siebie, jednak zawierają różne wartości np. kwoty do wpłaty. Naszym zadaniem jest wyciągnąć wartość kwoty do wpłaty oraz numer klienta z każdego pdfa i zapisać te dane do zbiorczego excela. Ponadto, nie z każdego pliku pdf mamy wykonać te operacje, tylko dla tych co mają „main” w nazwie.
Zasada działania algorytmu:
Wiedząc, że kwota do wpłaty jest wartością dziesiętną, pobieramy wszystkie wartości dziesiętne z pdf i zapisujemy do listy. W związku z tym że pdf-y są do siebie podobne, zawsze interesująca nas wartość będzie na n-tym miejscu w tej liście. Podobnie wyznaczamy numer klienta, tylko że są to wartości całkowitoliczbowe.
Importujemy biblioteki:
from tika import parser
import re
import pandas as pd
import os
import glob
Zapis ścieżek wszystkich plików z folderu do listy:
files = glob.glob("C:Users/pdfy/*.pdf")
Ograniczamy ścieżki plików do tych co mają „main” w nazwie:
l1=[k for k in files if 'main' in k]
Tworzymy puste listy:
lista_kwot=[]
lista_klient=[]
lista_bledow=[]
Tworzymy pętlę:
for element in l1:
parsed_pdf = parser.from_file(element) – przeksztalcenie pdfa do string
x=re.findall("\d+\.\d+", parsed_pdf['content']) -zapis wszystkich wartości dziesiętnych ze string
try:
lista_kwot.append(x[28]) – zapis tej jednej interesującej nas wartości do listy (jest ona zawsze na 29. miejscu)
except:
lista_bledow.append(element) – zapis sciezki pliku do listy w razie wystąpienia bledu
y=re.findall(r'\d+', parsed_pdf['content']) – zapis wszystkich wartosci całkowitych ze string
try:
lista_klient.append(x[3]) – zapis tej jednej interesującej nas wartości do listy (jest ona zawsze na 3. miejscu)
except:
lista_bledow.append(element)
Tworzymy końcowy dataframe:
df=pd.DataFrame()
df[‘kwota’]=lista_kwot
df['klient']=lista_klient
Zapisujemy do Excel:
excel_dir = 'C:/sciezka_do_zapisu/plik.xlsx'
df.to_excel(excel_dir)
Wyciąganie tekstu z określonej strony (np. drugiej):
from pypdf import PdfReader
import re
import pandas as pd
import os
import pandas as pd
import glob
file = glob.glob("sciezka/*.pdf")
reader = PdfReader(file)
page = reader.pages[1]
text = page.extract_text()
print(text)
s=text[0:5]