pyku.find#
- pyku.find.expand_unix_directory_patterns(patterns, regex=None)[source]#
Get list of directories from list of patterns
- Parameters:
patterns (list[str]) – The list of patterns.
regex (str) – REGEX pattern. When given, the final list will be filtered according to the REGEX string. An example regex string is: “(?:_19[6-9]{1}[0-9]{1}|_20[0-9]{1}[0-9]{1})”
- Returns:
List of directory names
- Return type:
list
Example
For the example to run independently of an existing file system, a fake file system is created and the function is run within the fake file system.
In [1]: import pyku.find as find ...: from pyfakefs.fake_filesystem_unittest import Patcher ...: ...: with Patcher() as patcher: ...: ...: # Create list of fake files on fake filesystem ...: # -------------------------------------------- ...: ...: fake_files = [ ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19800101_19801231.nc', ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19810101_19811231.nc', ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19820101_19821231.nc', ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19830101_19831231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19800101_19801231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19810101_19811231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19820101_19821231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19830101_19831231.nc', ...: ] ...: ...: for fake_file in fake_files: ...: patcher.fs.create_file(fake_file) ...: ...: # Run function ...: # ------------ ...: ...: files = find.expand_unix_directory_patterns([ ...: '/fakedisk/{tas,pr}/day/grid/HYRAS-5km/\ ...: *_HYRAS-5km_????????_????????.nc', ...: ]) ...: ...: files ...: Out[1]: ['/fakedisk/pr/day/grid/HYRAS-5km/*_HYRAS-5km_????????_????????.nc', '/fakedisk/tas/day/grid/HYRAS-5km/*_HYRAS-5km_????????_????????.nc']
- pyku.find.expand_unix_patterns(patterns, regex=None)[source]#
Expand unix patterns into a list of file/directory patterns.
- Parameters:
patterns (list[str]) – The input list of patterns.
regex (str) – REGEX pattern. When given, the final list will be filtered according to the REGEX string. An example regex string is: “(?:_19[6-9]{1}[0-9]{1}|_20[0-9]{1}[0-9]{1})”
- Returns:
List of file names.
- Return type:
list
Example
For the example to run independently of an existing file system, a fake file system is created and the function is run within the fake file system.
In [1]: import pyku.find as find ...: from pyfakefs.fake_filesystem_unittest import Patcher ...: ...: with Patcher() as patcher: ...: ...: # Create list of fake files on fake filesystem ...: # -------------------------------------------- ...: ...: fake_files = [ ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19800101_19801231.nc', ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19810101_19811231.nc', ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19820101_19821231.nc', ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19830101_19831231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19800101_19801231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19810101_19811231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19820101_19821231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19830101_19831231.nc', ...: ] ...: ...: for fake_file in fake_files: ...: patcher.fs.create_file(fake_file) ...: ...: # Run function ...: # ------------ ...: ...: files = find.expand_unix_patterns([ ...: '/fakedisk/{tas,pr}/day/grid/HYRAS-5km/\ ...: *_HYRAS-5km_????????_????????.nc', ...: ]) ...: ...: files ...: Out[1]: ['/fakedisk/tas/day/grid/HYRAS-5km/tas_HYRAS-5km_19800101_19801231.nc', '/fakedisk/tas/day/grid/HYRAS-5km/tas_HYRAS-5km_19810101_19811231.nc', '/fakedisk/tas/day/grid/HYRAS-5km/tas_HYRAS-5km_19820101_19821231.nc', '/fakedisk/tas/day/grid/HYRAS-5km/tas_HYRAS-5km_19830101_19831231.nc', '/fakedisk/pr/day/grid/HYRAS-5km/pr_HYRAS-5km_19800101_19801231.nc', '/fakedisk/pr/day/grid/HYRAS-5km/pr_HYRAS-5km_19810101_19811231.nc', '/fakedisk/pr/day/grid/HYRAS-5km/pr_HYRAS-5km_19820101_19821231.nc', '/fakedisk/pr/day/grid/HYRAS-5km/pr_HYRAS-5km_19830101_19831231.nc']
- pyku.find.get_ensemble_definition(ensemble)[source]#
Get a pandas dataframe of all facets of ensemble.
- Parameters:
ensemble (str) – Ensemble identifier (e.g. ‘cmip5_dwd_core’). You can
pyku.list_ensembles(). (obtain the list of ensembles available with)
- Returns:
Dataframe of core ensemble facets.
- Return type:
Example
In [1]: import pyku.find as find ...: find.get_ensemble_definition('dwd_cmip5_core') ...: Out[1]: driving_experiment_name ... rcm_version_id 0 historical ... v1 1 rcp85 ... v1 2 historical ... v1 3 rcp26 ... v1 4 historical ... v1 5 rcp26 ... v1 6 rcp45 ... v1 7 historical ... v1 8 rcp45 ... v1 9 rcp85 ... v1 10 historical ... v1 11 rcp45 ... v1 12 historical ... v1 13 rcp26 ... v1 14 historical ... v1 15 rcp85 ... v1 16 historical ... v2 17 rcp26 ... v2 18 historical ... v1 19 rcp45 ... v1 20 rcp85 ... v1 21 rcp26 ... v1 22 historical ... v1 23 rcp45 ... v1 24 rcp85 ... v1 25 historical ... v1 26 rcp45 ... v1 27 historical ... v1 28 rcp85 ... v1 [29 rows x 5 columns]
- pyku.find.get_file_dataframe(files, standard='cordex')[source]#
Build cordex dataframe from list of files. The dataframe contains the standard facets determined from the file directory and name. This permits to efficiently select files.
- Parameters:
files (list) – List of files
- Returns:
The output dataframe.
- Return type:
Example
For the example to run independently of an existing file system, a fake file system is created and the function is run within the fake file system.
In [1]: import pyku.find as find ...: from pyfakefs.fake_filesystem_unittest import Patcher ...: ...: # Create a fake filesystem to run example ...: # --------------------------------------- ...: ...: with Patcher() as patcher: ...: ...: # Create fake files on fake filesystem ...: # ------------------------------------ ...: ...: fake_files = [ ...: '/fakedisk/DWD-CPS/output/GER-0275/CLMcom-DWD/\ ...: ECMWF-ERA5/evaluation/r1i1p1/CLMcom-DWD-CCLM5-0-16/\ ...: x0n1-v1/1hr/tas/v20221116/tas_GER-0275_ECMWF-ERA5_\ ...: evaluation_r1i1p1_CLMcom-DWD-CCLM5-0-16_x0n1-v1_\ ...: 1hr_202001010000-202012312300.nc', ...: '/fakedisk/DWD-CPS/output/GER-0275/CLMcom-DWD/\ ...: ECMWF-ERA5/evaluation/r1i1p1/CLMcom-DWD-CCLM5-0-16/\ ...: x0n1-v1/1hr/tas/v20221116/tas_GER-0275_ECMWF-ERA5_\ ...: evaluation_r1i1p1_CLMcom-DWD-CCLM5-0-16_x0n1-v1_1hr_\ ...: 202101010000-202112312300.nc', ...: '/fakedisk/DWD-CPS/output/GER-0275/CLMcom-DWD/\ ...: ECMWF-ERA5/evaluation/r1i1p1/CLMcom-DWD-CCLM5-0-16/\ ...: x0n1-v1/day/pr/v20230630/pr_GER-0275_ECMWF-ERA5_\ ...: evaluation_r1i1p1_CLMcom-DWD-CCLM5-0-16_x0n1-v1_day_\ ...: 20220101-20221231.nc' ...: ] ...: ...: for fake_file in fake_files: ...: patcher.fs.create_file(fake_file) ...: ...: df = find.get_file_dataframe( ...: fake_files, standard='cordex' ...: ) ...: ...: # Show the data ...: # ------------- ...: ...: df.head() ...: Out[1]: file ... end_timestamp 0 /fakedisk/DWD-CPS/output/GER-0275/CLMcom-DWD/E... ... 2020-12-31 23:00:00 1 /fakedisk/DWD-CPS/output/GER-0275/CLMcom-DWD/E... ... 2021-12-31 23:00:00 2 /fakedisk/DWD-CPS/output/GER-0275/CLMcom-DWD/E... ... 2022-12-31 00:00:00 [3 rows x 13 columns]
With that the following facets are available in the dataframe:
In [2]: df.columns Out[2]: Index(['file', 'variable_name', 'CORDEX_domain', 'driving_model_id', 'driving_experiment_name', 'driving_model_ensemble_member', 'model_id', 'rcm_version_id', 'frequency', 'start_time', 'end_time', 'start_timestamp', 'end_timestamp'], dtype='object')
A query can be run:
In [3]: df.query("variable_name == 'pr'") Out[3]: file ... end_timestamp 2 /fakedisk/DWD-CPS/output/GER-0275/CLMcom-DWD/E... ... 2022-12-31 [1 rows x 13 columns]
And the files returned:
In [4]: df.query("variable_name == 'pr'").file.values Out[4]: array(['/fakedisk/DWD-CPS/output/GER-0275/CLMcom-DWD/ECMWF-ERA5/evaluation/r1i1p1/CLMcom-DWD-CCLM5-0-16/x0n1-v1/day/pr/v20230630/pr_GER-0275_ECMWF-ERA5_evaluation_r1i1p1_CLMcom-DWD-CCLM5-0-16_x0n1-v1_day_20220101-20221231.nc'], dtype=object)
- pyku.find.get_files_by_drs(standard, parent_dir=None, version=None, file_suffix='.nc', **kwargs)[source]#
Get list of files from DRS
- Parameters:
standard (str) – The CMOR standard of the files. in the dataframe. To get the list of available standards defined in pyku, see
pyku.drs.list_drs_standards()parent_dir (str) – Parent directory where the DRS structure is found.
version (str) – An optional version string. If provided, it will be used to create an additional directory between the CMOR path and the CMOR filename. While not CMOR-compliant, this is used for the ESGF.
file_suffix (str) – The file extension (default: “.nc”)
**kwargs (dict) – Keyword arguments corresponding to the expected DRS parameters. The required parameters are extracted from the standard’s stem_pattern and parent_pattern.
- Returns:
List of files
- Return type:
list
- pyku.find.get_files_from_list_of_patterns(patterns, regex=None)[source]#
Expand all patterns in a list of patterns.
- Parameters:
patterns (list(str)) – The input list of patterns.
regex (str) – REGEX pattern. When given, the final list will be filtered according to the REGEX string. An example regex string is: “(?:_19[6-9]{1}[0-9]{1}|_20[0-9]{1}[0-9]{1})”
- Returns:
List expanded patterns
- Return type:
list
Example
For the example to run independently of an existing file system, a fake file system is created and the function is run within the fake file system.
In [1]: import pyku.find as find ...: from pyfakefs.fake_filesystem_unittest import Patcher ...: ...: with Patcher() as patcher: ...: ...: # Create list of fake files on fake filesystem ...: # -------------------------------------------- ...: ...: fake_files = [ ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19800101_19801231.nc', ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19810101_19811231.nc', ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19820101_19821231.nc', ...: '/fakedisk/tas/day/grid/HYRAS-5km/\ ...: tas_HYRAS-5km_19830101_19831231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19800101_19801231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19810101_19811231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19820101_19821231.nc', ...: '/fakedisk/pr/day/grid/HYRAS-5km/\ ...: pr_HYRAS-5km_19830101_19831231.nc', ...: ] ...: ...: for fake_file in fake_files: ...: patcher.fs.create_file(fake_file) ...: ...: # Run function ...: # ------------ ...: ...: files = find.get_files_from_list_of_patterns([ ...: '/fakedisk/{tas,pr}/day/grid/HYRAS-5km/\ ...: *_HYRAS-5km_????????_????????.nc', ...: ]) ...: ...: files ...: Out[1]: ['/fakedisk/tas/day/grid/HYRAS-5km/tas_HYRAS-5km_19800101_19801231.nc', '/fakedisk/tas/day/grid/HYRAS-5km/tas_HYRAS-5km_19810101_19811231.nc', '/fakedisk/tas/day/grid/HYRAS-5km/tas_HYRAS-5km_19820101_19821231.nc', '/fakedisk/tas/day/grid/HYRAS-5km/tas_HYRAS-5km_19830101_19831231.nc', '/fakedisk/pr/day/grid/HYRAS-5km/pr_HYRAS-5km_19800101_19801231.nc', '/fakedisk/pr/day/grid/HYRAS-5km/pr_HYRAS-5km_19810101_19811231.nc', '/fakedisk/pr/day/grid/HYRAS-5km/pr_HYRAS-5km_19820101_19821231.nc', '/fakedisk/pr/day/grid/HYRAS-5km/pr_HYRAS-5km_19830101_19831231.nc']
- pyku.find.guess_time_in_string(input_string)[source]#
Guess the time from the name of a directory
- Parameters:
input_string (str) – The input string.
- Returns:
The time guessed from the string.
- Return type:
Example
For the example to run independently of an existing file system, a fake file system is created and the function is run within the fake file system.
In [1]: import pyku.find as find ...: from pyfakefs.fake_filesystem_unittest import Patcher ...: ...: with Patcher() as patcher: ...: ...: # Create directory on fake filesystem ...: # ----------------------------------- ...: ...: patcher.fs.create_dir('/CLMcom-DWD/ECMWF-ERA5/\ ...: evaluation/r1i1p1/CLMcom-DWD-CCLM5-0-16/x0n1-v1/1hr/\ ...: tas/v20221116') ...: ...: # Run function ...: # ------------ ...: guessed_time = find.guess_time_in_string( ...: '/CLMcom-DWD/ECMWF-ERA5/evaluation/r1i1p1/\ ...: CLMcom-DWD-CCLM5-0-16/x0n1-v1/1hr/tas/v20221116') ...: ...: guessed_time ...: Out[1]: Timestamp('2022-11-16 00:00:00')
- pyku.find.list_ensembles()[source]#
Show all named ensembles
- Returns:
Dictionary of availabe ensembes
- Return type:
dict
Example
To list all named ensembles defined in pyku:
In [1]: import pyku ...: pyku.list_ensembles() ...: Out[1]: ['dwd_cmip5_reference', 'dwd_cmip5_core', 'dwd_cmip6_reference']
- pyku.find.search_dataframe(df, search_dict)[source]#
Search dataframe by model keys
- Returns:
The output pandas dataframe.
- Return type:
- pyku.find.select_directories_by_datetimes(list_of_directories, min_date=None, max_date=None, exclude_min=False, exclude_max=False)[source]#
Select directories by datetimes. The datetime is guessed from the directory name. The purpose of this function is to effectively filter directories that do not contain the datetimes required in an analysis.
- Parameters:
list_of_directories (List[str]) – The input list of files or directories.
min_date (str, datetime.datetime) – Optional. The minimal date. Defaults to
pandas.Timestamp.min.max_date (str, datetime.datetime) – Optional. The maximal date. Default to
pandas.Timestamp.max.exclude_min (str, optional) – Optional. Whether to exclude the minimal date. Defaults to False.
exclude_max (str, optional) – Optional. Whether to exclude the maximal date. Defaults to False.
- Returns:
List of selected files.
- Return type:
List[str]
Example
For the example to run independently of an existing file system, a fake file system is created and the function is run within the fake file system.
In [1]: import pyku.find as find ...: from pyfakefs.fake_filesystem_unittest import Patcher ...: ...: # Create a fake filesystem to run example ...: # --------------------------------------- ...: ...: with Patcher() as patcher: ...: ...: # The list of input directories ...: # ----------------------------- ...: ...: list_of_directories = [ ...: '/kp/kpxx/integra/data4dwd/projectdata/seasonalfc/\ ...: hindcasts/DWD/GCFS1/seas198801', ...: '/kp/kpxx/integra/data4dwd/projectdata/seasonalfc/\ ...: hindcasts/DWD/GCFS1/seas198802', ...: '/kp/kpxx/integra/data4dwd/projectdata/seasonalfc/\ ...: hindcasts/DWD/GCFS1/seas198803', ...: '/kp/kpxx/integra/data4dwd/projectdata/seasonalfc/\ ...: hindcasts/DWD/GCFS1/seas198804', ...: '/kp/kpxx/integra/data4dwd/projectdata/seasonalfc/\ ...: hindcasts/DWD/GCFS1/seas198805', ...: ] ...: ...: # Create the input directories on the fake filesystem ...: # --------------------------------------------------- ...: ...: for directory in list_of_directories: ...: patcher.fs.create_dir(directory) ...: ...: # Run function within the fake filesystem ...: # --------------------------------------- ...: ...: output_directories = find.select_directories_by_datetimes( ...: list_of_directories, ...: min_date='1988-02-01', ...: max_date='1988-04-01', ...: exclude_max=True ...: ) ...: ...: output_directories ...: Out[1]: ['/kp/kpxx/integra/data4dwd/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198802', '/kp/kpxx/integra/data4dwd/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198803']
- pyku.find.select_ensemble(df, ensemble_name=None, standard=None)[source]#
Select ensemble members from file dataframe.
- Parameters:
df (
pandas.Dataframe) – The input dataframe. This dataframe contains the list of all files and their facets. Tise dataframe given as an input is expected to have been built using the functionpyku.find.get_file_dataframe().ensemble_name (str) – Name of the ensemble as defined in pyku. To get the full list of ensembles defined in pyku, you can use
pyku.find.list_ensembles(). For example, you can select the DWD CMIP5 core ensemble using the name ‘cmip5_dwd_core_ensemble’.standard (str) – The CMOR standard of the files. in the dataframe. To get the list of available standards defined in pyku, see
pyku.drs.list_drs_standards()
- Returns:
The dataframe with selected ensemble.
- Return type:
pandas.Dataframe
Note
It should be possible to automate the detection of the standard, but this is not built in at the moment and the standard shall be passed.
- pyku.find.select_files_by_datetimes(list_of_files, min_date=None, max_date=None, exclude_min=False, exclude_max=False, offset=None)[source]#
Select files with that contains any data in the min_date/max_date range. The purpose of this function is to effectively filter files that do not contain the datetimes required in an analysis.
- Parameters:
list_of_files (List[str]) – The input list of files.
min_date (str, datetime.datetime) – The minimal date.
max_date (str, datetime.datetime) – The maximal date.
exclude_min (str, optional) – Whether to exclude the minimal date. Defaults to False.
exclude_max (str, optional) – Whether to exclude the maximal date. Defaults to False.
offset (str, optional) – Whether to apply an offset. The format of the string is taken from
pandas.to_timedelta(). For example,-15 minutescan be passed, or1 day 15 minutes 3 seconds. This is needed because for example the COSMO-CLM data have the time labels set to the upper time bounds. For exampled the data with filename lffd20220201000500.nc have a time label of2022-02-01T00:05:00, a lower time bound of2022-02-01T00:00:00, and an upper time bound of2022-02-01T00:05:00.
- Returns:
List of selected files
- Return type:
List[str]
Example
For the testing and documenting this function, a temporary directory as well as temporary data are generated. The function is run on those fake files.
In [1]: import tempfile ...: from pprint import pprint ...: import pyku.resources as resources ...: import pyku.find as find ...: ...: with tempfile.TemporaryDirectory() as temp_dir: ...: ...: # Generate fake datatsets in temporary directory ...: # ---------------------------------------------- ...: ...: input_files = ( ...: resources. ...: generate_fake_datasets_with_datetimes_on_disk(temp_dir) ...: ) ...: ...: print("Input files") ...: pprint(input_files) ...: ...: # Select files by datetime and print result ...: # ----------------------------------------- ...: ...: output_files = find.select_files_by_datetimes( ...: input_files, ...: min_date='1988-02-01', ...: max_date='1988-04-01', ...: exclude_max=True ...: ) ...: ...: print("Output files:") ...: pprint(output_files) ...: Input files ['/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198801/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198801_r15i1p1/tas_day_r1i1p1_1988010100-1988063018.nc', '/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198802/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198802_r15i1p1/tas_day_r1i1p1_1988020100-1988073118.nc', '/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198803/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198803_r15i1p1/tas_day_r1i1p1_1988030100-1988083118.nc', '/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198804/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198804_r15i1p1/tas_day_r1i1p1_1988040100-1988093018.nc', '/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198805/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198805_r15i1p1/tas_day_r1i1p1_1988050100-1988103118.nc', '/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198806/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198806_r15i1p1/tas_day_r1i1p1_1988060100-1988113018.nc', '/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198807/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198807_r15i1p1/tas_day_r1i1p1_1988070100-1988123118.nc', '/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198808/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198808_r15i1p1/tas_day_r1i1p1_1988080100-1989013118.nc', '/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198809/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198809_r15i1p1/tas_day_r1i1p1_1988090100-1989022818.nc'] Output files: ['/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198801/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198801_r15i1p1/tas_day_r1i1p1_1988010100-1988063018.nc', '/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198802/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198802_r15i1p1/tas_day_r1i1p1_1988020100-1988073118.nc', '/tmp/tmpmkaeamox/projectdata/seasonalfc/hindcasts/DWD/GCFS1/seas198803/day/atmos/tas/r15i1p1/tas_day_GCFS1_seas198803_r15i1p1/tas_day_r1i1p1_1988030100-1988083118.nc']