# Import module
import os25 Directory navigation
directory, files, folders, navigation
Navigating directories is essential for reading, saving, changing, adding, and removing data files. Python’s os and glob modules provide plenty of tools for directory navigation and file operations.
os module
The operating system (os) module provides a way of using operating system-dependent functionality like reading or writing to the file system, managing file and directory paths, and working with file permissions.
# Finding current working directory
current_dir = os.getcwd()
print("Current Working Directory:", current_dir)Current Working Directory: D:\OneDrive - Kansas State University\Andres Patrignani\Teaching\Scientific programming\pynotes-agriscience\basic_concepts
# Move up one directory (exit current folder)
os.chdir('..')
print(os.getcwd())
# Go back to the original directory
os.chdir(current_dir)
print(os.getcwd())
# Changing Directory
# os.chdir('/path/to/new/directory') # Navigate to a new directory (replace with an existing path)
# Create new directory
new_dir = os.path.join(current_dir, 'soil_data')
os.makedirs(new_dir, exist_ok=True) # No error if directory already exists
# Remove empty directory
dir_to_remove = os.path.join(current_dir, 'soil_data')
os.rmdir(dir_to_remove)
# Remove directory containing files (need to import shutil module)
# shutil.rmtree(dir_to_remove)D:\OneDrive - Kansas State University\Andres Patrignani\Teaching\Scientific programming\pynotes-agriscience
D:\OneDrive - Kansas State University\Andres Patrignani\Teaching\Scientific programming\pynotes-agriscience\basic_concepts
# Splitting file names into parts
file_name = "soil_samples.csv"
file_path = os.path.join(current_dir, file_name)
dir_name, file_name = os.path.split(file_path)
file_name_only, file_extension = os.path.splitext(file_name)
print(f"Directory:{dir_name} \nFile Name:{file_name_only} \nExtension:{file_extension}")Directory:D:\OneDrive - Kansas State University\Andres Patrignani\Teaching\Scientific programming\pynotes-agriscience\basic_concepts
File Name:soil_samples
Extension:.csv
# List specific files
files_list = os.listdir(current_dir)
for file in files_list:
if file.endswith(".csv"):
print(file)Using the glob module
The glob module is similar to the os module, but is widely used for file name pattern matching and allows you to search for files and directories using a convenient wildcard matching that is particularly handy for listing files in a directory, especially when you’re interested in files of a specific type (such as csv, txt, jpg). To target files with a specific extension, we use a wildcard symbol (*), which acts as a placeholder for 'all files of a particular type'. For example, to list all the text files in a given directory, we use the pattern *.txt.
# Import modules
import os
import glob# Get current working directory
print(os.getcwd())
# Move up one directory (exit current folder)
os.chdir('..')
# Get all files in directory
print(os.listdir())
# List and store all files with a specific file extension in the datasets folder
csv_files = glob.glob("datasets/*.csv") # Returns a list of file names
print(csv_files)
# Go back to the original directory
os.chdir(current_dir)D:\OneDrive - Kansas State University\Andres Patrignani\Teaching\Scientific programming\pynotes-agriscience\basic_concepts
['.git', '.gitignore', '.ipynb_checkpoints', '.nojekyll', '.quarto', 'basic_concepts', 'cover_v1.png', 'datasets', 'docs', 'exercises', 'favicon.png', 'index.qmd', 'markdown', 'media', '_quarto.yml']
['datasets\\acme_ok_daily.csv', 'datasets\\anscombe_quartet.csv', 'datasets\\ashland_bottoms_5min.csv', 'datasets\\codon_aminoacids.csv', 'datasets\\corn_allometric_biomass.csv', 'datasets\\corn_dryland_trial.csv', 'datasets\\corn_nue_multiple_locs.csv', 'datasets\\frontier_yield_rainfall.csv', 'datasets\\garden_city_5min.csv', 'datasets\\Greeley_Kansas.csv', 'datasets\\gypsum_2018_daily.csv', 'datasets\\hollis_ok_precip_et.csv', 'datasets\\hydrosense_lab_calibration.csv', 'datasets\\image_labels.csv', 'datasets\\Johnson_Kansas.csv', 'datasets\\kings_creek_2022_2023_daily.csv', 'datasets\\kings_creek_2022_2023_hourly.csv', 'datasets\\konza_prairie_K1B_watershed.csv', 'datasets\\KS_Manhattan_6_SSW.csv', 'datasets\\KS_mesonet_geoinfo.csv', 'datasets\\ks_mesonet_summary_soil_physical_properties.csv', 'datasets\\neutron_probe_calibration.csv', 'datasets\\ok_mesonet_8_apr_2019.csv', 'datasets\\pixlabel.csv', 'datasets\\proctor_test.csv', 'datasets\\profile_soil_moisture_lahoma_ntw.csv', 'datasets\\riley_usdm_20210701_20220916.csv', 'datasets\\rocky_ford_july_2020_1min.csv', 'datasets\\soil_respiration_data.csv', 'datasets\\soil_texture_color.csv', 'datasets\\soil_water_retention_curve.csv', 'datasets\\sorghum_franklin_county_2023.csv', 'datasets\\sorghum_yield_kansas.csv', 'datasets\\teros_12_calibration.csv', 'datasets\\wheat_biomass_chickasha_ok_2012_2013.csv', 'datasets\\wheat_ftsw.csv', 'datasets\\wheat_variety_trial_2023_greeley_county.csv']