如何使用python重命名文件名中的特定单词

时间:2016-03-11 05:16:17

标签: python-2.7

这是我重命名文件名的示例代码。

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文件,如下所示。 Example csv file

你能指导我吗

2 个答案:

答案 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)

  1. 首先解决方法是将其替换为:

    new_filename = filename_noext
    for key in file_names.keys():
      new_filename = new_filename.replace(key, file_names[key])
    
  2. 它实际上通过文件名中的replacing子字符串来解决您的任务。

    1. 其他方式:

      new_filename = "_".join([file_names.get(k, k) for k in filename_noext.split('_')])
      
    2. 这实际上只替换了由特定模式分隔的子字符串(' _',在您的情况下)。