Python - 根据子文件夹和文件名II

时间:2015-07-22 01:40:51

标签: rename os.walk

这个问题是对这篇文章的后续跟进:Python - rename files in subfolders based on subfolder and file name

我正在尝试遍历C:\temp\内的子文件夹中的文件,并以指定的方式重命名每个文件。以下是我到目前为止的代码:

begin program.
import os
path = "C:/temp/"

for root,dirname,filename in os.walk(path):   
     for i in filename:
        i = i.split(".")
        first = i[1][0]
        last = i[0][-1]       
        #print filename  
        print "My_"+last+"_"+i[0]+"_"+root.split("/")[-1]+"."+i[1]
        os.rename(filename,"My_"+last+"_"+i[0]+"_"+root.split("/")[-1]+"."+i[1])
end program.

当我运行该行print "My_"+last+"_"+i ...时,它会正确显示VA1122F.A14中保存的名为C:\temp\11182014\的文件将被重命名 My_F_VA1122F_11182014.A14

但是,os.rename命令会返回此错误:

  

"必须是字符串,而不是列表。"

这似乎是由于我使用" filename"在os.rename命令中。根据我的阅读,os.rename的第一个参数应该是文件名。当我运行"打印文件名时,"它确实返回给定子文件夹中所有文件的列表,因此该错误是有意义的。我似乎无法弄清楚如何一次抓取一个旧文件名。

我也尝试了这些,但每个都返回了一个错误:

os.rename(os.path.join(root, filename),"My_"+last+"_"+i[0]+"_"+root.split("/")[-1]+"."+i[1])
  

错误:返回安装python的文件夹和错误   一个字符串作为左操作数。

os.rename(root + os.sep + filename,"My_"+last+"_"+i[0]+"_"+root.split("/")[-1]+"."+i[1])
  

错误:无法连接' str' amd' list'对象

我已经搜索了文档和许多帖子,但无法弄清楚我错过了什么。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您正在尝试传递文件名列表以重命名命令。您将在innerloop中获得单个文件名

for root,dirname,filenames in os.walk(path):   
     for filename in filenames:
        i = filename.split(".")

你可以使用

os.rename(os.path.join(root, filename),"My_"+last+"_"+i[0]+"_"+root.split("/")[-1]+"."+i[1])

PS:强烈建议不要使用'+'连接字符串,因此最好使用字符串格式。

os.rename(os.path.join(root, filename),"My_{last}_{start}_{sub_fold}.{ext}".format(last=last, start=i[0], sub_fold=root.split("/")[-1], ext=i[1]))