根据条件将文件从一个目录移动到另一个目录

Move Files from a Directory to Another Based on a Condition

我有一个包含多个文件夹的主目录。我想遍历这些子文件夹,检查每个子文件夹是否包含超过(例如 10 个文件)保留 10 个文件并将其余文件移动到新目录,否则删除子文件夹。

这是我的目录的样子:

每个子目录大约有100个文件,我想遍历这些子目录,先检查一下,保留10个文件,其余的移动到新目录。

我认为这可以在 pathlibos 的帮助下完成,但我在编写脚本时需要帮助。

我认为代码将如下所示:

for directory in os.listdir('path'):
    for file in os.listdir(os.path.join('path', directory)):
        if(....){
          # keep 10 files and move the rest to a new directory
        } else {
          # delete the subdir
        }

我建议对 movingremoving 文件和目录使用 shutil 库,下面是 moving 文件从一个路径到另一个路径的示例:

import shutil

original = r'original_path_where_the_file_is_currently_stored\file_name.file_extension'
target = r'target_path_where_the_file_will_be_moved\file_name.file_extension'

shutil.move(original,target)

下面是删除目录及其所有内容的示例:

import shutil
dirPath = '/path_to_the_dir/name_of_dir/'
shutil.rmtree(dirPath)

我们使用上面的两个片段来创建最终代码:


import shutil
import os
new_dir_path = "path_to_the_new_dir/new_dir_name"
for directory in os.listdir('path'):
    for index, file in enumerate(file_list := os.listdir(path_dir := os.path.join('path', directory))):
        if(len(file_list) >= 10):
          # keep 10 files and move the rest to a new directory
            if(index > 9):
             shutil.move(os.path.join(path_dir,file),os.path.join(new_dir_path,file))
        else:
          # delete the subdir
          shutil.rmtree(path_dir)