替换文件名的子字符串

时间:2014-07-30 13:25:22

标签: python replace substring rename

很抱歉,如果之前已经提出此问题。我没有通过搜索找到答案。 需要在Python中替换文件名的子字符串。

旧字符串:“_ ready”

新字符串:“_ busy”

文件:a_ready.txt,b_ready.txt,c.txt,d_blala.txt,e_ready.txt

输出:a_busy.txt,b_busy.txt,c.txt,d_blala.txt,e_busy.txt

有什么想法吗?我试图使用replce(),但没有任何反应。这些文件仍然使用旧名称。

这是我的代码:

import os

counter = 0

for file in os.listdir("c:\\test"):
    if file.endswith(".txt"):
        if file.find("_ready") > 0:
            counter = counter + 1
            print ("old name:" + file)
            file.replace("_ready", "_busy")
            print ("new name:" + file)
if counter == 0:
    print("No file has been found")

5 个答案:

答案 0 :(得分:1)

另一个答案显示您可以用string.replace替换子字符串。你需要的是os.rename

import os
counter = 0
path = "c:\\test"
for file in os.listdir(path):
    if file.endswith(".txt"):
        if file.find("_ready") > 0:
            counter = counter + 1
            os.rename(path + "\\"+file, path + "\\"+file.replace("_ready", "_busy"))
if counter == 0:
    print("No file has been found")

你的代码的问题是python中的字符串是不可变的,所以replace返回一个新的字符串,你必须替换当前的file并添加到列表中,如果你想稍后使用它:

files = [] # list of tuple with old filename and new filename
for file in os.listdir(path):
    if file.endswith(".txt"):
        if file.find("_ready") > 0:
            counter = counter + 1
            newFileName = file.replace("_ready", "_busy"))
            file = newFileName
            files.append((file, newFileName))

答案 1 :(得分:0)

类似的东西:

old_string = "a_ready"
new_string = old_string.replace('_ready', '_busy')

答案 2 :(得分:0)

string.replace()就是你要找的东西

检查here,它位于底部

您可以使用

for file in files:
    output.append( file.replace(oldString, newString) )

答案 3 :(得分:0)

您也可以执行类似的操作(如果字符串是常量):

old_string = "a_ready"
new_string = old_string[:1]+"_busy"

虽然我认为@Selva有更好的方法。

答案 4 :(得分:0)

from os import rename, listdir

fnames = listdir('.')
for fname in fnames:
    if fname.endswith('.txt'):
        new_name = fname.replace('_ready', '_busy')
        rename(fname, new_name)

这是你可能需要的。我还明白你了吗?