Source code for pyspedas.utilities.dailynames

import logging
import numpy as np
from pyspedas.tplot_tools import time_string, time_double
from datetime import datetime, timezone


[docs] def dailynames(directory='', trange=None, res=24*3600., hour_res=False, file_format='%Y%m%d', prefix='', suffix='', return_times=False): """ Creates a list of file names using a time range, resoution and file format Based on Davin Larson's file_dailynames in IDL SPEDAS Parameters: directory: str String containing the directory for the generated file names Default: ''. If directory is not specified the names will be written to the current working directory trange: list of str, list of datetime or list of floats Two-element list containing the start and end times for the file names Default: Current date. If the date range is not specified the routine will use the current date. res: float File name resolution in seconds Default: 24*3600., i.e., daily) file_format: str Format of the file names using strftime directives; for reference: https://strftime.org Default: %Y%m%d, i.e., daily prefix: str file name prefix Default: '' suffix: str file name suffix Default: '' Returns: List containing filenames Example: >>> from pyspedsas import time_float >>> time_range = time_float(['2021-01-01','2021-01-03']) >>> pyspedas.dailynames(trange=time_range) """ if trange is None: logging.error('No trange specified') return if hour_res: res = 3600. file_format = '%Y%m%d%H' # allows the user to pass in trange as list of datetime objects if type(trange[0]) == datetime and type(trange[1]) == datetime: trange = [time_string(trange[0].replace(tzinfo=timezone.utc).timestamp()), time_string(trange[1].replace(tzinfo=timezone.utc).timestamp())] tr = [trange[0], trange[1]] if isinstance(trange[0], str): tr[0] = time_double(trange[0]) if isinstance(trange[1], str): tr[1] = time_double(trange[1]) # Davin's magic heisted from file_dailynames in IDL mmtr = [np.floor(tr[0]/res), np.ceil(tr[1]/res)] if mmtr[1]-mmtr[0] < 1: n = 1 else: n = int(mmtr[1]-mmtr[0]) times = [(float(num)+mmtr[0])*res for num in range(n)] if return_times: return times dates = [] files = [] for time in times: if time_string(time, fmt=file_format) not in dates: dates.append(time_string(time, fmt=file_format)) for date in dates: files.append(directory + prefix + date + suffix) return files
def yearlynames( trange, file_format="%Y%m%d", resolution="year", directory="", prefix="", suffix="", ): """ Creates a list of file names using a time range, resolution, and file format. Parameters: trange: list of str or list of datetime Two-element list containing the start and end times for the file names. resolution: str Either 'year' or 'half-year' to determine the resolution. file_format: str Format of the file names using strftime directives. directory: str String containing the directory for the generated file names. prefix: str file name prefix. suffix: str file name suffix. Returns: List containing filenames. """ if trange is None: raise ValueError("No trange specified") start_date = ( trange[0] if isinstance(trange[0], datetime) else datetime.strptime(trange[0], "%Y-%m-%d") ) end_date = ( trange[1] if isinstance(trange[1], datetime) else datetime.strptime(trange[1], "%Y-%m-%d") ) dates = [] if resolution == "half-year": # Adjust the start date to be 6 months prior to the specified start date if start_date.month <= 6: adjusted_start_date = datetime(start_date.year - 1, start_date.month + 6, 1) else: adjusted_start_date = datetime(start_date.year, start_date.month - 6, 1) # Generate all the January 1st and July 1st dates within the range potential_dates = [datetime(year, month, 1) for year in range(start_date.year, end_date.year + 1) for month in [1, 7]] # Filter out dates outside the range dates = [date for date in potential_dates if adjusted_start_date < date <= end_date] elif resolution == "year": dates = [datetime(year, 1, 1) for year in range(start_date.year, end_date.year + 1)] else: raise ValueError("Invalid resolution specified. Choose 'year' or 'half-year'.") files = [directory + prefix + date.strftime(file_format) + suffix for date in dates] return files