name, extension = filename.rsplit('.', 2)
file_match = re.compile(f'^{name}(?:-(\d+))?.{extension}$')
max_number = None
for file in files:
m = file_match.match(file)
if m is None:
continue
num = int(m.groups()[0] or 0)
max_number = max(num, max_number or 0)
if max_number is None:
return filename
return f'{name}-{num + 1}.{extension}'
if __name__ == '__main__':
assert generate_unique_name('file1.txt', ['file.txt']) == 'file1.txt'
assert generate_unique_name('file1.txt', ['file1.txt']) == 'file1-1.txt'
assert generate_unique_name('file1.txt', ['file1.txt', 'file1.1.txt', 'file1-2.txt']) == 'file1-3.txt’
а почто использовал built-in операторы? (file)
сорян, кто забрал багу поправьте return f'{name}-{max_number + 1}.{extension}’
Обсуждают сегодня