Python中,如何重新命名基于列表的几个文件?

在Windows中使用Python我试图重命名一次在同一文件夹中的几个文件,但我不能使用列表进行重命名,这就是为什么我得到这个错误,当我尝试我的代码:

os.rename(dirlist [1],words [1])WindowsError:[错误2]系统找不到指定的文件

这里是示例代码:

import os import sys words = os.listdir('C:/Users/Any/Desktop/test') dirlist = os.listdir('C:/Users/Any/Desktop/test') words = [w.replace('E', 'e') for w in words] print words os.rename(dirlist[1], words[1]) 

我想要实现的是我的Python脚本运行在一个select的文件夹,脚本将把所有的文件在那里,将重命名所有的。 但棘手的部分来自当我不能单独出来的文件夹名称,并让他们重新命名,因为他们连接到列表。

Solutions Collecting From Web of "Python中,如何重新命名基于列表的几个文件?"

os.listdir只是给你回基地名结果。 没有完整的路径。 它们不存在于您当前的工作目录中。 你需要加入他们的根:

 root = 'C:/Users/Any/Desktop/test' for item in os.listdir(root): fullpath = os.path.join(root, item) os.rename(fullpath, fullpath.replace('E', 'e')) 

更新

为了回应您关于如何执行大量替换的评论,我建议您可以使用translatemaketrans

让我们从我们的字典和源字符串开始:

 d = {'E': 'e', 'a': 'B', 'v': 'C'} s = 'aAaAvVvVeEeE' 

首先,让我向您展示一个非常原始和入门级的方法:

 for old, new in d.iteritems(): s = s.replace(old, new) print s # BABACVCVeeee 

这个例子遍历你的字典,多次调用替换。 它的工作原理很简单,使用简单的语法。 但它有点吮吸不得不循环字典中的每个字符串,并调用多次替换。

还有很多其他的方法可以做到这一点,但是另一种方法是创建一个转换表,然后对每个字符串重用:

 import string old, new = zip(*d.items()) print old, new # ('a', 'E', 'v') ('B', 'e', 'C') old_str, new_str = ''.join(old), ''.join(new) print old_str, new_str # aEv BeC table = string.maketrans(old_str, new_str) print s.translate(table) # BABACVCVeeee 

这将把字典分解为键和值元组。 然后,我们加入介绍字符串,并将它们传递给maketrans ,这将使我们回到桌子。 我们只需要这样做一次。 现在我们有一个表,可以用它来翻译任何字符串。

错误是因为你当前的工作目录没有指向'C:/Users/Any/Desktop/test' ,默认情况下它指向c:\python27如果你使用的是python 2.7,你可以通过os.getcwd() ,因此在应用该重命名之前,应将当前的工作目录更改为'C:/Users/Any/Desktop/test'

使用os.chdir()更改当前的工作目录。

 import os import sys words = os.listdir('C:/Users/Any/Desktop/test') dirlist = os.listdir('C:/Users/Any/Desktop/test') words = [w.replace('E', 'e') for w in words] print words os.chdir('C:/Users/Any/Desktop/test') #this changes the current working directory os.rename(dirlist[1], words[1])