Python:替换文件名

时间:2015-03-02 06:25:05

标签: python-2.7

我拼命地需要你的帮助。我听说python是用户友好的,但我很难找到合适的命令。

我的文件名为:

cake_cake01_F_A01.ab1 
cake_cake02_F_A02.ab1 
cake_cake03_F_A03.ab1 
cake_cake04_F_B01.ab1 
cake_cake05_F_B02.ab1 
cake_cake06_F_B03.ab1 
cake_cake07_F_C01.ab1 
cake_cake08_F_C02.ab1 
cake_cake09_F_C03.ab1

在具有特定目录的文件夹中。

我需要将它们更改为:

cake_cake01-2101plus.ab1  
cake_cake02-2101plus.ab1 
cake_cake03-2101plus.ab1 
cake_cake04-2101plus.ab1 
cake_cake05-2101plus.ab1 
cake_cake06-2101plus.ab1
cake_cake07-2101plus.ab1 
cake_cake08-2101plus.ab1 
cake_cake09-2101plus.ab1

在同一个文件夹中。

我想我必须删除这些名称的-10到-5个位置,并在文件扩展名前添加-2010plus。我怎么能用Python做到这一点?

2 个答案:

答案 0 :(得分:1)

您是否可以使用glob来更改文件名:

import os
import glob

filenames = glob.glob('/path/to/cake_cake*.ab1')
for filename in filenames:
    newname = filename[:-10] + '-2101plus.ab1'
    os.rename(filename, newname)

答案 1 :(得分:0)

os.listdir()

  

返回一个列表,其中包含path。给出的目录中的条目名称。

使用regular expressions,您可以match()一个所需的模式,然后通过仅替换您希望的字符串部分,从之前的字符串创建一个新名称。

如果需要,您可以轻松更改replacement或迭代所有目录(directory),甚至可以更改模式的开头或结尾。

模式的简短说明:\d{2}表示" 2位",\.匹配点,[A-Z]匹配任何大写字母。

import os
import re

################ Change those ###############
replacement = '-2101plus'
directory = '/home/usercat/allmycakes'

first_part_of_pattern = 'cake_cake\d{2}'
last_part_of_pattern = 'txt'
#############################################

for file_name in os.listdir(directory):
    if re.match(r'%s_[A-Z]_[A-Z]\d{2}\.%s' % (first_part_of_pattern, last_part_of_pattern), file_name):

        old_path = directory + '/' + file_name
        new_file_name = re.sub(r'(%s)_[A-Z]_[A-Z]\d{2}(\.%s)' % (first_part_of_pattern, last_part_of_pattern),
                               r'\1{}\2'.format(replacement), file_name)

        new_path = directory + '/' + new_file_name

        os.renames(old_path, new_path)