view csopraSplitInput.py @ 5:3e7978af2ba2 draft

"planemo upload for repository https://forgemia.inra.fr/carboseq/record-projet-carboseq/-/tree/5f761ea7dab0a6f8c978cbbe4946e16edc6d032e/toos/CarboSeqSimulator commit 5f761ea7dab0a6f8c978cbbe4946e16edc6d032e-dirty"
author siwaa
date Wed, 28 Aug 2024 14:53:30 +0000
parents
children 20886bc40659
line wrap: on
line source

import pandas as pd
import os
import shutil
import math
import sys

def split_csv(input_folder, output_folder, max_chunck_size):
    unit_path = input_folder + "/units.csv"
    soil_path = input_folder + "/soil.csv"
    crop_path = input_folder + "/crop.csv"

    os.mkdir(output_folder)
    
    dfs = pd.read_csv(soil_path)
    dfc = pd.read_csv(crop_path)

    max_ID = dfs.loc[dfs['ID'].idxmax()]['ID']

    step = max_chunck_size
    
    nb_split = math.ceil(max_ID / max_chunck_size)

    print(max_ID)

    print(nb_split)

    for i in range(1,nb_split + 1):

        dfSplit = pd.DataFrame()
        dfSplit = dfs.loc[((dfs['ID'] >= (((i-1) * step)) + 1) & (dfs['ID'] <= ((((i-1) * step)) + step )))]

        dfcSplit = pd.DataFrame()
        dfcSplit = dfc.loc[((dfc['ID'] >= (((i-1) * step)) + 1) & (dfc['ID'] <= ((((i-1) * step)) + step )))]
        
        os.mkdir(os.path.join(output_folder, f"{input_folder}_{i}"))
        shutil.copy(unit_path, os.path.join(output_folder, f"{input_folder}_{i}"))
        dfSplit.to_csv(os.path.join(output_folder, f"{input_folder}_{i}", "soil.csv"), index=False)
        dfcSplit.to_csv(os.path.join(output_folder, f"{input_folder}_{i}", "crop.csv"), index=False)
        shutil.make_archive( os.path.join(output_folder,f"{input_folder}_{i}"), 'zip',  os.path.join(output_folder, f"{input_folder}_{i}"))

# Example usage
input_folder = "input"
output_folder = "outputs"

input_file = sys.argv[1]
max_chunck_size = int(sys.argv[2])

shutil.unpack_archive(input_file, input_folder, 'zip')

split_csv(input_folder, output_folder, max_chunck_size)