pyMez.Code.Utils.Names module
The module names contains the functions for automatically generating file names
Help
#----------------------------------------------------------------------------- # Name: Names.py # Purpose: A helper module that determines automatic # file names for data saving # Author: Aric Sanders # Created: 2016/01/20 # License: MIT License #----------------------------------------------------------------------------- """ The module names contains the functions for automatically generating file names Help --------------- <a href="./index.html">`pyMez.Code.Utils`</a> <div> <a href="../../../pyMez_Documentation.html">Documentation Home</a> | <a href="../../index.html">API Documentation Home</a> | <a href="../../../Examples/html/Examples_Home.html">Examples Home</a> | <a href="../../../Reference_Index.html">Index</a> </div>""" #------------------------------------------------------------------------------- # Standard Package Imports import os import re import datetime import glob #------------------------------------------------------------------------------- # Module Constants GENERAL_DESCRIPTORS=['Log','Measurement','State','Settings'] #------------------------------------------------------------------------------- # Module Functions def get_date(): """Returns todays date in 'yyyymmdd' format""" today=datetime.date.today() return today.strftime('%Y%m%d') def get_filename_iterator(base_name=None,directory=None,extension=None,padding=3): """ Returns the number of files in directory with base_name +1, padded by padding""" iterator=0 replacement_string="{:0"+str(padding)+"d}" if extension is None: extension="*" if base_name is None: return replacement_string.format(1) elif directory is None: file_names=glob.glob('*.'+extension) for name in file_names: if re.match(base_name,name): iterator+=1 return replacement_string.format(iterator+1) else: file_names=glob.glob(directory+'/*.'+extension) for name in file_names: name=os.path.split(name)[1] if re.match(base_name,name): iterator+=1 return replacement_string.format(iterator+1) def auto_name(specific_descriptor=None,general_descriptor=None,directory=None,extension='xml',padding=3): """ Returns an automatically generated name for a file in a directory""" if not specific_descriptor is None: name=specific_descriptor if not general_descriptor is None: name=name+'_'+general_descriptor name=name+'_'+get_date()+'_' name=name+get_filename_iterator(name,directory,extension,padding)+'.'+extension return name else: return None def split_filename(filename): """Returns a list of file name pieces. The list will contain any CamelCase, snake_case or common delimiter seperated words (last element is nominally the file extension)""" out_string=re.sub("([\a-z])([\A-Z])",r'\1 \2',filename) out_list=re.split("[\W|\.|_]+",out_string) return out_list def change_extension(file_path,new_extension=None): "Changes the extension of file path to the new one" if new_extension is None: return file_path else: # just to make it uniform, remove any . and add it back in new_extension="."+new_extension.replace(".","") return re.sub("\.\w+",new_extension,file_path) def filename_decrement(filename,padding=3): """Takes an autogenrated file name in the form specific_descriptor_general_descriptor_date_iterator and decreases the iterator by 1""" replacement_string="{:0"+str(padding)+"d}" filename_pattern="(?P<base_name>[\w|_]+)_(?P<iterator>\d+).[\w]+" match=re.search(filename_pattern,filename,re.IGNORECASE) if match: i=match.groupdict()["iterator"] iterator=int(i) iterator-=1 new_filename=re.sub(i,replacement_string.format(iterator),filename) return new_filename else: print("Filename did not conform to the base_name_iterator.extension pattern") def filename_increment(filename,padding=3): """Takes an autogenrated file name in the form specific_descriptor_general_descriptor_date_iterator and decreases the iterator by 1""" replacement_string="{:0"+str(padding)+"d}" filename_pattern="(?P<base_name>[\w|_]+)_(?P<iterator>\d+).[\w]+" match=re.search(filename_pattern,filename,re.IGNORECASE) if match: i=match.groupdict()["iterator"] iterator=int(i) iterator+=1 new_filename=re.sub(i,replacement_string.format(iterator),filename) return new_filename else: print("Filename did not conform to the base_name_iterator.extension pattern") #------------------------------------------------------------------------------- # Module Scripts def test_module(): """ Tests the module by writing files in the current working directory """ base_name='Test_File' number_files=20 print('The result of get_filename_iterator() is %s'%get_filename_iterator(base_name,extension='txt')) print('-'*80) print('\n') print('The current working diretory is %s \n'%os.getcwd()) for i in range(number_files): try: new_name=base_name+"_"+get_filename_iterator(base_name,extension='txt')+'.txt' f=open(new_name,'w') f.write(str(i)) f.close() print("Wrote New File %s"%new_name) except: raise print('failed') print("End of test") print('\n') print('-'*80) def clean_up_test_module(): """ Deletes the files writen by test_module() """ base_name='Test_File' number_files=int(get_filename_iterator(base_name,extension='txt'))-1 print("The number of files is {:0d}".format(number_files)) print('\n\nThe result of get_filename_iterator(base_name,os.getcwd(),"txt") is %s'%get_filename_iterator(base_name,extension='txt')) print('-'*80) print('The current working diretory is %s \n'%os.getcwd()) for i in range(number_files): try: new_name=base_name+'_'+"{:03d}".format(i+1)+'.txt' os.remove(new_name) print("Removed File %s"%new_name) except: raise print('failed') print("End of cleanup") print('\n') print('-'*80) def test_auto_name(): """Tests the auto name function""" print(("The result of auto_name('Test','AutoName',None,'txt) is {0}".format(auto_name('Test', 'AutoName', None,'txt')))) def test_filename_change_iterator(): """Tests the filename decrement and increment functions""" name=auto_name('Test','AutoName',None,'txt') print(("The original name is {0}".format(name))) print(("-"*80)) print(("The result of filename_increment is {0}".format(filename_increment(name)))) print(("-"*80)) print(("The result of filename_decrement is {0}".format(filename_decrement(name)))) #------------------------------------------------------------------------------- # Module Runner if __name__ == '__main__': test_module() clean_up_test_module() test_auto_name() test_filename_change_iterator()
Functions
def auto_name(
specific_descriptor=None, general_descriptor=None, directory=None, extension='xml', padding=3)
Returns an automatically generated name for a file in a directory
def auto_name(specific_descriptor=None,general_descriptor=None,directory=None,extension='xml',padding=3): """ Returns an automatically generated name for a file in a directory""" if not specific_descriptor is None: name=specific_descriptor if not general_descriptor is None: name=name+'_'+general_descriptor name=name+'_'+get_date()+'_' name=name+get_filename_iterator(name,directory,extension,padding)+'.'+extension return name else: return None
def change_extension(
file_path, new_extension=None)
Changes the extension of file path to the new one
def change_extension(file_path,new_extension=None): "Changes the extension of file path to the new one" if new_extension is None: return file_path else: # just to make it uniform, remove any . and add it back in new_extension="."+new_extension.replace(".","") return re.sub("\.\w+",new_extension,file_path)
def clean_up_test_module(
)
Deletes the files writen by test_module()
def clean_up_test_module(): """ Deletes the files writen by test_module() """ base_name='Test_File' number_files=int(get_filename_iterator(base_name,extension='txt'))-1 print("The number of files is {:0d}".format(number_files)) print('\n\nThe result of get_filename_iterator(base_name,os.getcwd(),"txt") is %s'%get_filename_iterator(base_name,extension='txt')) print('-'*80) print('The current working diretory is %s \n'%os.getcwd()) for i in range(number_files): try: new_name=base_name+'_'+"{:03d}".format(i+1)+'.txt' os.remove(new_name) print("Removed File %s"%new_name) except: raise print('failed') print("End of cleanup") print('\n') print('-'*80)
def filename_decrement(
filename, padding=3)
Takes an autogenrated file name in the form specific_descriptor_general_descriptor_date_iterator and decreases the iterator by 1
def filename_decrement(filename,padding=3): """Takes an autogenrated file name in the form specific_descriptor_general_descriptor_date_iterator and decreases the iterator by 1""" replacement_string="{:0"+str(padding)+"d}" filename_pattern="(?P<base_name>[\w|_]+)_(?P<iterator>\d+).[\w]+" match=re.search(filename_pattern,filename,re.IGNORECASE) if match: i=match.groupdict()["iterator"] iterator=int(i) iterator-=1 new_filename=re.sub(i,replacement_string.format(iterator),filename) return new_filename else: print("Filename did not conform to the base_name_iterator.extension pattern")
def filename_increment(
filename, padding=3)
Takes an autogenrated file name in the form specific_descriptor_general_descriptor_date_iterator and decreases the iterator by 1
def filename_increment(filename,padding=3): """Takes an autogenrated file name in the form specific_descriptor_general_descriptor_date_iterator and decreases the iterator by 1""" replacement_string="{:0"+str(padding)+"d}" filename_pattern="(?P<base_name>[\w|_]+)_(?P<iterator>\d+).[\w]+" match=re.search(filename_pattern,filename,re.IGNORECASE) if match: i=match.groupdict()["iterator"] iterator=int(i) iterator+=1 new_filename=re.sub(i,replacement_string.format(iterator),filename) return new_filename else: print("Filename did not conform to the base_name_iterator.extension pattern")
def get_date(
)
Returns todays date in 'yyyymmdd' format
def get_date(): """Returns todays date in 'yyyymmdd' format""" today=datetime.date.today() return today.strftime('%Y%m%d')
def get_filename_iterator(
base_name=None, directory=None, extension=None, padding=3)
Returns the number of files in directory with base_name +1, padded by padding
def get_filename_iterator(base_name=None,directory=None,extension=None,padding=3): """ Returns the number of files in directory with base_name +1, padded by padding""" iterator=0 replacement_string="{:0"+str(padding)+"d}" if extension is None: extension="*" if base_name is None: return replacement_string.format(1) elif directory is None: file_names=glob.glob('*.'+extension) for name in file_names: if re.match(base_name,name): iterator+=1 return replacement_string.format(iterator+1) else: file_names=glob.glob(directory+'/*.'+extension) for name in file_names: name=os.path.split(name)[1] if re.match(base_name,name): iterator+=1 return replacement_string.format(iterator+1)
def split_filename(
filename)
Returns a list of file name pieces. The list will contain any CamelCase, snake_case or common delimiter seperated words (last element is nominally the file extension)
def split_filename(filename): """Returns a list of file name pieces. The list will contain any CamelCase, snake_case or common delimiter seperated words (last element is nominally the file extension)""" out_string=re.sub("([\a-z])([\A-Z])",r'\1 \2',filename) out_list=re.split("[\W|\.|_]+",out_string) return out_list
def test_auto_name(
)
Tests the auto name function
def test_auto_name(): """Tests the auto name function""" print(("The result of auto_name('Test','AutoName',None,'txt) is {0}".format(auto_name('Test', 'AutoName', None,'txt'))))
def test_filename_change_iterator(
)
Tests the filename decrement and increment functions
def test_filename_change_iterator(): """Tests the filename decrement and increment functions""" name=auto_name('Test','AutoName',None,'txt') print(("The original name is {0}".format(name))) print(("-"*80)) print(("The result of filename_increment is {0}".format(filename_increment(name)))) print(("-"*80)) print(("The result of filename_decrement is {0}".format(filename_decrement(name))))
def test_module(
)
Tests the module by writing files in the current working directory
def test_module(): """ Tests the module by writing files in the current working directory """ base_name='Test_File' number_files=20 print('The result of get_filename_iterator() is %s'%get_filename_iterator(base_name,extension='txt')) print('-'*80) print('\n') print('The current working diretory is %s \n'%os.getcwd()) for i in range(number_files): try: new_name=base_name+"_"+get_filename_iterator(base_name,extension='txt')+'.txt' f=open(new_name,'w') f.write(str(i)) f.close() print("Wrote New File %s"%new_name) except: raise print('failed') print("End of test") print('\n') print('-'*80)
Module variables
var GENERAL_DESCRIPTORS