很抱歉,如果之前已经提出此问题。我没有通过搜索找到答案。 需要在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")
答案 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)
这是你可能需要的。我还明白你了吗?