Использование регулярного выражения с символическими именами групп позволит вам легко получить доступ к частям имени файла, которыми вы хотите манипулировать.Я использовал класс, так как подумал, что вы можете добавить дополнительные функции к процессу переименования, такие как подуровни или самый низкий уровень.
#!/usr/bin/env python3
import re
import os
class NamedFile(object):
file_mask = re.compile(r"(?P<PREFIX>l)(?P<LEVEL>\d+)_(?P<SUBLEVEL>\d+)_(?P<LOWLEVEL>\d+)\.(?P<EXTENSION>m4a)")
file_format = "{PREFIX}{LEVEL}_{SUBLEVEL}_{LOWLEVEL}.{EXTENSION}".format
@classmethod
def files(cls, path):
for f in sorted(os.listdir(path)):
groups = cls.file_mask.match(f)
if groups is not None:
yield (path, f, groups.groupdict())
@classmethod
def new_name(cls, groups, increment):
level = int(groups["LEVEL"]) + 1
groups["LEVEL"] = level
return cls.file_format(**groups)
@classmethod
def rename(cls, path, increment):
for path, f, file_parts in NamedFile.files(path):
new_filename = cls.new_name(file_parts, increment)
abs_new = os.path.join(path, new_filename)
abs_old = os.path.join(path, f)
os.rename(abs_old, abs_new)
if __name__ == "__main__":
print("===Original file names===")
for path, f, file_parts in NamedFile.files("."):
print(f)
NamedFile.rename(".", 1)
print("===New file names===")
for path, f, file_parts in NamedFile.files("."):
print(f)