这是我重命名文件名的示例代码。
import os
import csv
import glob
file_pattrn = '*.*'
file_names = {}
with open('new.csv') as f:
reader = csv.reader(f)
for row in reader:
file_names[row[0]] = row[1]
for file in glob.glob(file_pattrn):
path, filename = os.path.split(file)
filename_noext, ext = os.path.splitext(filename)
new_filename = file_names.get(filename_noext, filename_noext)
os.rename(os.path.join(path, filename),
os.path.join(path, '{}{}'.format(new_filename, ext)))
但是这会重命名整个文件名。我想用新名称重命名文件名中的特定单词。 例如,我有一个文件名如下。
1.AAAA_NI_MU.wav
2.AAAB_GH_TY.wav
3.BBBB_PO_WG.wav是这样的。我需要将前四个字符重命名为新名称。 对于新名称,我保留了一个csv文件,如下所示。
你能指导我吗
答案 0 :(得分:1)
我所有文件都有xxxx_rest_of_the_file_name
模式,您想要替换xxxx
部分,这可能会有效:
for file in glob.glob(file_pattrn):
path, filename = os.path.split(file)
start, rest = file_name.split('_', 1)
new_filename = '_'.join([file_names.get(start, start), rest])
os.rename(os.path.join(path, filename),
os.path.join(path, new_filename))
修改强>
不使用下划线更改名称的版本。
for file_name in files:
parts = file_name.split('_', 1)
if len(parts) == 1:
continue
start, rest = parts
new_filename = '_'.join([file_names.get(start, start), rest])
print(new_filename)
答案 1 :(得分:1)
在您的代码示例中,在第:
new_filename = file_names.get(filename_noext, filename_noext)
首先解决方法是将其替换为:
new_filename = filename_noext
for key in file_names.keys():
new_filename = new_filename.replace(key, file_names[key])
它实际上通过文件名中的replacing子字符串来解决您的任务。
其他方式:
new_filename = "_".join([file_names.get(k, k) for k in filename_noext.split('_')])
这实际上只替换了由特定模式分隔的子字符串(' _',在您的情况下)。