I have a txt that contains in each line a sentence like this: INT_ASTIK_EAS ER_ASTOM_ASTIK and so on. I want to ask for a directory of the main folder that contains the subfolders that each contain the `ASTIK.shp`, then the `EAS.shp`, then the `ASTOM.shp`, etc `INT` means to perform an intersection with this code where in this case should involve `ASTIK` and `EAS` shapefiles. inte_s=gpd.overlay(ASTIK,EAS,how='intersection') and check if it has no info in the attribute table. Then go the to the other line and `catch on` the meaning of the line and perform `erase` between the two named shapefiles. Find them and perform it.How do i do that without making a lot of conditions and line by line: like directory=input('Insert dir of the main folder') If 'INT' in firstline of txt in directory and ASTOM and EAS: perform interesection between those. i don't think the only way is to create hundreads of if conditions that will probably never be valid. How should i do it? i have done this: import os import fiona rootdir = r'C:\Users\user\Desktop\a' # path to your root directory you walk sfiles = {} # a dictionary with all the .shp files for entry in os.listdir(rootdir): dirpath = os.path.join(rootdir, entry) if os.path.isdir(dirpath): for file in os.listdir(dirpath): # Get all files in the subdirectories if file.endswith('.shp'): # If it's an .shp. filepath = os.path.join(dirpath, file) sfiles[filepath[:-4]] = fiona.open(filepath) then you make an action dict like this: action_dict = {'INT': 'intersection', 'ER': 'difference'} and later action, shape1, shape2 = line.split('_') # here line is ER_ASTOM_ASTIK or whatever line in your txt file if shape1 in sfiles and shape2 in sfiles: gpd.overlay(sfiles[shape1], sfiles[shape2], how=action_dict[action]) THE LAST VERSION import os import fiona rootdir = r'C:\Users\user\Desktop\a' # path to your root directory you walk sfiles = {} # a dictionary with all the .shp files for entry in os.listdir(rootdir): dirpath = os.path.join(rootdir, entry) if os.path.isdir(dirpath): for file in os.listdir(dirpath): # Get all files in the subdirectories if file.endswith('.shp'): # If it's an .shp. filepath = os.path.join(dirpath, file) sfiles[filepath[:-4]] = fiona.open(filepath) action_dict = {'INT': 'intersection', 'ER': 'difference'} directory=input('Insert dir of the main folder') with open(input()) as txtfile: #insert directory of txt x = txtfile.readlines() for line in x: action, shape1, shape2 = line.split('_') # here line is ER_ASTOM_ASTIK or whatever line in your txt file if shape1 in sfiles and shape2 in sfiles: gpd.overlay(sfiles[shape1], sfiles[shape2], how=action_dict[action]) it doesn't probably perform the intersection or difference. how can i store its results in a variable because i have to do further process with the outcomes of every operation of every line.