har*_*rry 2 python windows rename list
在 Windows 中使用 python 我试图一次重命名同一文件夹中的多个文件,但我无法使用列表来进行重命名,这就是为什么当我尝试我的代码时出现此错误:
os.rename(dirlist[1], Words[1]) WindowsError: [Error 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])
Run Code Online (Sandbox Code Playgroud)
我想要实现的目标是让我的 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'))
Run Code Online (Sandbox Code Playgroud)
更新
为了回应您关于如何执行大量替换的评论,我建议您可以使用translate和maketrans。
让我们从我们的字典和源字符串开始:
d = {'E': 'e', 'a': 'B', 'v': 'C'}
s = 'aAaAvVvVeEeE'
Run Code Online (Sandbox Code Playgroud)
首先,让我向您展示一个非常原始和入门级方法的示例:
for old, new in d.iteritems():
s = s.replace(old, new)
print s
# BABACVCVeeee
Run Code Online (Sandbox Code Playgroud)
该示例循环遍历您的字典,多次调用替换。使用简单的语法,它可以工作,而且非常有意义。但必须为每个字符串循环遍历字典并多次调用替换,这有点糟糕。
我确信还有很多其他方法可以做到这一点,但另一种方法是创建一个转换表一次,然后为每个字符串重用它:
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
Run Code Online (Sandbox Code Playgroud)
这会将字典拆分为键和值元组。然后我们加入介绍字符串并将它们传递给maketrans,这将给我们返回一个表。我们只需要做一次。现在我们有了一个表,可以用它来翻译任何字符串。
| 归档时间: |
|
| 查看次数: |
4534 次 |
| 最近记录: |