diff --git a/pdf_oralia/join.py b/pdf_oralia/join.py new file mode 100644 index 0000000..37c5aea --- /dev/null +++ b/pdf_oralia/join.py @@ -0,0 +1,22 @@ +import glob + +import pandas as pd + + +def join_excel(src, dest, file_pattern): + """Join every excel file in arc respecting file_pattern into on unique file in dist""" + filenames = list_files(src, file_pattern) + dfs = extract_dfs(filenames) + joined_df = pd.concat(dfs) + joined_df.to_excel(dest, index=False) + + +def list_files(src, file_glob): + return list(glob.iglob(f"{src}/{file_glob}")) + + +def extract_dfs(filenames): + dfs = [] + for filename in filenames: + dfs.append(pd.read_excel(filename)) + return dfs diff --git a/pdf_oralia/scripts.py b/pdf_oralia/scripts.py index cd486bd..ba4be5f 100644 --- a/pdf_oralia/scripts.py +++ b/pdf_oralia/scripts.py @@ -5,6 +5,7 @@ from pathlib import Path import click from .extract import extract_save +from .join import join_excel logging_config = dict( version=1, @@ -64,5 +65,29 @@ def all(src, dest): @main.command() @click.option("--src", help="Tous les fichiers dans src", default="./") @click.option("--dest", help="Où mettre les fichiers produits", default="") -def join(src, dest): - join_excel(src, dest, df_names=["charge", "locataire"]) +@click.option( + "--force", + help="Ecraser si le ficher destination existe.", + default=False, + is_flag=True, +) +def join(src, dest, force): + """Join tous les fichiers excel charge (resp locataire) de src dans un seul fichier charge.xlsx dans dist. + + Exemple: + + pdf-oralia join --src --dest + + + """ + dest_charge = f"{dest}/charge.xlsx" + if not force and Path(dest_charge).exists(): + raise ValueError(f"The file {dest_charge} already exists") + dest_locataire = f"{dest}/locataire.xlsx" + if not force and Path(dest_locataire).exists(): + raise ValueError(f"The file {dest_locataire} already exists") + + join_excel(src, dest_charge, "*_charge.xlsx") + logging.info(f"Les données charges ont été concaténées dans {dest_charge}") + join_excel(src, dest_locataire, "*_locataire.xlsx") + logging.info(f"Les données locataires ont été concaténées dans {dest_locataire}")