Python,如何根据列表重命名几个文件?

时间:2012-08-11 18:36:19

标签: python windows list rename

在Windows上使用python尝试重命名同一个文件夹中的多个文件,但是我无法使用列表进行重命名,这就是我在尝试使用代码时出现此错误的原因:

  

os.rename(dirlist [1],单词[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脚本在一个选择的文件夹上运行,脚本将获取其中的所有文件,并将重命名所有文件。但是当我无法挑出文件夹名称并重命名它们因为它们被附加到列表时,棘手的部分就出现了。

2 个答案:

答案 0 :(得分:3)

os.listdir仅返回基本名称结果。不完整的路径。它们不存在于您当前的工作目录中。您需要将它们与root用户联系起来:

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

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

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

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

答案 1 :(得分:1)

错误即将发生,因为您当前的工作目录未指向'C:/Users/Any/Desktop/test',默认情况下,如果您使用的是python 2.7,则指向c:\python27,您可以通过{{1}进行检查因此,在应用重命名之前,您应该将当前工作目录更改为os.getcwd()

使用'C:/Users/Any/Desktop/test'更改当前工作目录。

os.chdir()