首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python,如何根据列表重命名几个文件?

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

Stack Overflow用户
提问于 2012-08-11 18:36:19
回答 2查看 4.3K关注 0票数 1

使用python和Windows,我试图一次重命名位于同一个文件夹中的几个文件,但我不能使用列表来重命名,这就是为什么我在尝试代码时会出现这个错误:

os.rename(dirlist1,words1) WindowsError:错误2系统找不到指定的文件

下面是示例代码:

代码语言:javascript
复制
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脚本在一个选择的文件夹上运行,这个脚本将接收所有的文件并重新命名它们。但棘手的部分是,当我不能单独列出文件夹名称,并让他们重命名,因为他们是附加到列表。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-11 18:41:19

os.listdir只给出基本名称结果。不是完整的道路。它们不存在于您当前的工作目录中。您需要用根目录将它们重新加入:

代码语言:javascript
复制
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和一个源字符串开始:

代码语言:javascript
复制
d = {'E': 'e', 'a': 'B', 'v': 'C'}
s = 'aAaAvVvVeEeE'

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

代码语言:javascript
复制
for old, new in d.iteritems():
    s = s.replace(old, new)

print s
# BABACVCVeeee

该示例遍历您的字典,多次调用替换。它起作用了,使用简单的语法,这是非常有意义的。但是,要遍历字典中的每一个字符串,并多次调用替换,这是很糟糕的。

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

代码语言:javascript
复制
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,这将给我们返回一个表。我们只需要做一次。现在我们有了一个表,并可以使用它来转换任何字符串。

票数 4
EN

Stack Overflow用户

发布于 2012-08-11 18:50:52

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

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

代码语言:javascript
复制
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])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11916625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档