我想从
重命名以下文件function Cats($name, $wrongCatlist, &$allCats, $Catlist) {
$Cats = getCats($Catlist, $name);
$Cats2 = array_unique ( $Cats );
$Cats3 = '"'.implode('", "', $Cats2).'"';
array_push($allCats, $Cats3);
}
使用以下名称
function Cats($name, $wrongCatlist, $allCats, $Catlist) {
$Cats = getCats($Catlist, $name);
$Cats2 = array_unique ( $Cats );
$Cats3 = '"'.implode('", "', $Cats2).'"';
array_push($allCats, $Cats3);
return $allCats;
}
$allCats = Cats($name, $wrongCatlist, $allCats, $Catlist);
我正在开发一个具有12个级别的应用程序,我必须在5级之前添加一个级别(l4_ _ ),因此,我必须重命名5级之后的所有级别。 级别5(l4_ _ )将是级别6(l5_ _ )
我是python和正则表达式的新手。任何帮助将不胜感激。 谢谢
答案 0 :(得分:2)
使用带有符号组名的正则表达式将使您能够轻松访问要操作的文件名部分。我使用了一个类,因为我认为您可能想在重命名过程中添加其他功能,例如子级别或最低级别。
#!/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)
答案 1 :(得分:1)
下面应该这样做。在这些文件所在的目录中运行它,它将在名为out
的目录中生成新文件。
from os import listdir, makedirs
from os.path import exists, isfile, join
import re
import shutil
output_dir = 'out'
files = [f for f in listdir('.') if isfile(join('.', f)) and f.endswith('.m4a')]
if not exists(output_dir):
makedirs(output_dir)
for f in files:
level, suffix = re.match(r'^l([0-9]+)(_.+)', f).groups()
shutil.copyfile(f, join(output_dir, 'l%d%s' % (int(level) + 1, suffix)))
结果:
$ ls
l4_0_0.m4a l4_0_1.m4a l4_0_2.m4a l5_0_0.m4a l5_0_1.m4a l5_0_2.m4a rename.py
$ python rename.py
$ ls out
l5_0_0.m4a l5_0_1.m4a l5_0_2.m4a l6_0_0.m4a l6_0_1.m4a l6_0_2.m4a