Advertisement
Woobinda

Make name for Folder

Jul 12th, 2016
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.95 KB | None | 0 0
  1. """Функция для присвоения названия и нумерации созданных объектов"""
  2.  
  3. base = ['foo', 'foo(1)', 'foo(3)', 'eggs', 'eggs(1)', 'eggs(2)', 'eggs(13)', 'eggs(100)', 'apple', 'apple(13)', 'apple(14)',
  4.     'bar(1)', 'bar(5)', 'eggser1', 'egger', 'egger(3)', 'eggss3s', 'eggs(104)']
  5.  
  6.  
  7. def folder_name(name, base=base):
  8.     if name not in base and len(name) > 0:
  9.         base.append(name)
  10.         return name
  11.     else:
  12.         if ')' in name and '(' in name and name[-2].isdigit():
  13.             name_index_len = len(name.split('(')[-1][:-1])
  14.             name_without_index = name[:-name_index_len - 2]
  15.             indexes_in_db = [x.split('(')[-1][:-1] for x in base if name_without_index == x[:-(len(x.split('(')[-1][:-1])+2)]]
  16.             digit_indexes = [x for x in indexes_in_db if x.isdigit()]
  17.             if len(digit_indexes) == 0:
  18.                 result =  name + '(1)'
  19.                 base.append(result)
  20.                 return result
  21.             digit_indexes = max(map(lambda x: int(x), digit_indexes))
  22.             result = name[:-(name_index_len+1)] + str(digit_indexes +1) + ')'
  23.             base.append(result)
  24.             return(result)
  25.  
  26.         indexes_in_db = []
  27.         for name_in_db in base:
  28.             if name_in_db.startswith(name) and name_in_db.endswith(')'):
  29.                 indexes_in_db.append(name_in_db[len(name):])
  30.  
  31.     digit_indexes = [x for x in indexes_in_db if x[1:-1].isdigit()]
  32.     digit_indexes = [x.split('(')[1][:-1] for x in digit_indexes]
  33.     if len(digit_indexes) == 0:
  34.         result = name + '(1)'
  35.         base.append(result)
  36.         return result
  37.  
  38.     result = name + '(' + str(max(map(lambda x: int(x), digit_indexes)) + 1) + ')'
  39.     base.append(result)
  40.     return result
  41.  
  42.  
  43. if __name__ == '__main__':
  44.  
  45.     assert folder_name('foo') == 'foo(4)'
  46.     assert folder_name('hello') == 'hello'
  47.     assert folder_name('apple') == 'apple(15)'
  48.     assert folder_name('bar') == 'bar'
  49.     assert folder_name('bar(1)') == 'bar(6)'
  50.     assert folder_name('foo(100)') == 'foo(100)'
  51.     assert folder_name('foo(3)') == 'foo(101)'
  52.     assert folder_name('') == '(1)'
  53.  
  54.     print("Tests successfully done.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement