如何使用python重命名文件夹中的多个文件



我的文档'中有超过1000个文件夹。在每个文件夹中,只有 4 张照片需要按该顺序命名为"北"、"东"、"南"和"西"。目前它们被命名为DSC_XXXX。我已经编写了这个脚本,但它没有执行。

import sys, os
folder_list = []
old_file_list = []
newnames = [North, South, East, West]
for file in os.listdir(sys.argv[1]):
    folder_list.append(file)
 for i in range(len(folder_list)):
    file = open(folder_list[i], r+)
    for file in os.listdir(sys.argv[1] + '/' folder_list[i]):
       old_file_list.append(file)
       os.rename(old_file_list, newnames[i])

我的思维方法是获取 1000 个文件夹的所有名称并将它们存储在folder_list中。然后打开每个文件夹并将 4 个图片名称保存在 old_file_list 中。从那里我想使用 os.rename(old_file_list, newnames[i]) 将 4 张照片重命名为东北、南和西。然后我希望它循环访问"我的文档"中尽可能多的文件夹。我是python的新手,任何帮助或建议将不胜感激。

您不需要所有列表,只需即时重命名所有文件即可。

import sys, os, glob
newnames = ["North", "South", "East", "West"]
for folder_name in glob.glob(sys.argv[1]):
    for new_name, old_name in zip(newnames, sorted(os.listdir(folder_name))):
       os.rename(os.path.join(folder_name, old_name), os.path.join(folder_name, new_name))

以下是我使用反感 [1] 的方法:

# untested
from antipathy import Path
def check_folder(folder):
    "returns four file names sorted alphebetically, or None if file names do not match criteria"
    found = folder.listdir()
    if len(found) != 4:
        return None
    elif not all(fn.startswith('DSC_') for fn in found):
        return None
    else:
        return sorted(found)
def rename(folder, files):
    "rename the four files from DSC_* to North East South West, keeping the extension"
    for old, new in zip(files, ('North', 'East', 'South', 'West')):
        new += old.ext
        folder.rename(old, new)
if __name__ == '__main__':
    for name in Path.listdir(sys.argv[1]):
        if not name.isdir():
            continue
        files = check_folder(name)
        if files is None:
            continue
        rename(name, files)

[1] 免责声明:antipathy是我的项目之一

相关内容

  • 没有找到相关文章

最新更新