Skip to content Skip to sidebar Skip to footer

Seperate Files To Folders And Sub Folders Using Python Script

In below code all the output files are getting written into T1 folder. How to separate those output files into sub folders, with the same name as original sub folders (where the or

Solution 1:

This should help

Demo:

import pandas as pd
import numpy as np
import glob
import os

path = '/root/Desktop/TT1/'
mystep = 0.4

#define the function
def data_splitter(df, name, dest_folder):
    max_time = df['Time'].max() # get max value of Time for the current csv file (df)
    myrange= np.arange(0, max_time, mystep) # build the threshold range
    basepath = "/root/Desktop/"
    for k in range(len(myrange)):
        # build the upper values 
        temp = df[(df['Time'] >= myrange[k]) & (df['Time'] < myrange[k] + mystep)]
        dest_f = os.path.join(basepath, dest_folder)
        if not os.path.isdir(dest_f):
            os.mkdir(dest_f)
        temp.to_csv(os.path.join(dest_f, "{}_{}.csv".format(name, k)))

# use os.walk(path) on the main path to get ALL subfolders inside path
for root,dirs, files in os.walk(path):
    for f in files:
        if f.endswith(".csv"):
            filename = os.path.join(root, f)
            df = pd.read_csv(filename)
            name = os.path.split(os.path.basename(filename))[1]
            dest_folder = os.path.basename(os.path.dirname(filename))
            data_splitter(df, name, dest_folder)

Solution 2:

A similar approach should work here:

import pandas as pd
import numpy as np
import glob
import os

input_root = '/root/Desktop/TT1'
output_root = '/root/Desktop/T1'

mystep = 0.4

#define the function
def data_splitter(input_file, output_path, output_basename):

    df = pd.read_csv(input_file)
    max_time = df['Time'].max() # get max value of Time for the current csv file (df)
    myrange = np.arange(0, max_time, mystep) # build the threshold range

    for k in range(len(myrange)):
        # build the upper values 
        temp = df[(df['Time'] >= myrange[k]) & (df['Time'] < myrange[k] + mystep)]
        temp.to_csv(os.path.join(output_path, f"{output_basename}_{k}.csv"))


# use os.walk(path) on the main path to get ALL subfolders inside path
for dirpath, dirnames, filenames in os.walk(input_root):
    for filename in filenames:
        if filename.lower().endswith('.csv'):
            input_file = os.path.join(dirpath, filename)
            sub_folders = dirpath[len(input_root)+1:]
            output_path = os.path.join(output_root, sub_folders)
            os.makedirs(output_path, exist_ok=True)  # Ensure the output folder exists
            output_basename = os.path.join(output_path, os.path.splitext(filename)[0] + '.csv')

            data_splitter(input_file, output_path, output_basename)

This should result with the folder structure recreated at your output root folder.


Post a Comment for "Seperate Files To Folders And Sub Folders Using Python Script"