Files
SUST/sustApp/convert_payment_export_csv.py
T
2025-01-19 17:10:56 +01:00

73 lines
2.8 KiB
Python

# Importing libraries
from numpy import genfromtxt, savetxt
from time import time
from datetime import datetime
import models
import os, re
from database import engine, SessionLocal
from pytz import timezone
def Load_Data(file_name):
#data = genfromtxt(file_name, delimiter=';', skip_header=1, converters={0: lambda s: str(s)})
#str2date = lambda x: datetime.strptime(x, '%d-%m-%y')
data = genfromtxt(file_name, delimiter=';', dtype=None, skip_header=0, encoding='utf-8-sig')
return data.tolist()
def extract_values(text):
# Regular expressions to match the required fields
regex_patterns = {
'Auftraggeber': r'Auftraggeber: (.*?) (Verwendungszweck|Zahlungsreferenz|IBAN|BIC)',
'Verwendungszweck': r'Verwendungszweck: (.*?) (Zahlungsreferenz|IBAN|BIC)',
'Zahlungsreferenz': r'Zahlungsreferenz: (.*?) (Verwendungszweck|IBAN|BIC)',
'IBAN': r'IBAN Auftraggeber: (.*?) ',
'BIC': r'BIC Auftraggeber: (.*?)$'
}
# Initialize an empty list to store extracted information
extracted_info = []
# Initialize an empty dictionary to store information from this row
row_info = {}
# Extract information using regular expressions
for key, pattern in regex_patterns.items():
match = re.search(pattern, text)
if match:
row_info[key] = match.group(1)
else:
row_info[key] = None
# Append the extracted information from this row to the list
extracted_info.append(row_info)
return extracted_info
if __name__ == "__main__":
t = time()
db = SessionLocal()
models.Base.metadata.create_all(bind=engine)
try:
home_directory = os.path.expanduser('~')
source_csv = os.path.join(home_directory, "OneDrive", "Dokumente", "SUST", "UmsatzListe_AT493443700000113407_20241212_095142_mod.csv")
target_csv = source_csv.replace(".csv", "_out.csv")
data = Load_Data(source_csv)
tz = timezone('UTC') # Replace with your desired timezone
outData = []
for i in data:
if ('Auftraggeber' in i[1]):
# extract key-value pairs Auftraggeber, Verwendungszweck, Zahlungsreferenz, IBAN
new_list = extract_values(i[1])
if len(new_list) > 0:
outData.append([i[0], new_list[0].get('Auftraggeber'), new_list[0].get('Zahlungsreferenz'), new_list[0].get('Verwendungszweck'), new_list[0].get('IBAN'), i[2], i[3].replace(',','.'), i[4], i[5]])
savetxt(target_csv, outData, delimiter=";", encoding='utf-8', header='valuta_date;client;reference;intended;IBAN;entry_date;amount;currency;timestamp', fmt='%s')
except Exception as e:
print (e)
finally:
print("Time elapsed: " + str(time() - t) + " s.") #0.091s