根据 Python 中的名称将文件从特定子目录移动到另一个子目录

是这样吗

给定一个目录./及其子目录('project1, project2, project3, ...')和文件结构如下:

├── project1
│   ├── file1
│   ├── file2
│   ├── process
│   │   └── f1
│   │       ├── pic1.png
│   │       └── pic2.jpg
│   ├── progress
│   │   └── f2
│   │       ├── 623.jpg
│   │       └── pic2323.png
│   └── session
│       └── f3
│           ├── 5632116.jpg
│           └── 72163.png
└── project2
    ├── file1
    ├── file2
    ├── process
    │   └── f1
    │       ├── pic1.png
    │       └── pic2.jpg
    ├── progress
    │   └── f2
    │       ├── 623.jpg
    │       └── pic2323.png
    └── session
        └── f3
            ├── 5632116.jpg
            └── 72163.png

对于每个project文件夹,我需要将图片从移动process到空files1,从progress和移动session到空files2

预期的结果将是这样的:

|── project1
|   ├── file1
|   │     ├── pic1.png
|   │     └── pic2.jpg
|   |── file2
|         ├── 623.jpg
|         └── pic2323.png
|         ├── 5632116.jpg
|         └── 72163.png
└── project2
    ├── file1
    │     ├── pic1.png
    │     └── pic2.jpg
    |── file2
          ├── 623.jpg
          └── pic2323.png
          ├── 5632116.jpg
          └── 72163.png

我的试用代码有效,但我觉得不够简洁,欢迎改进:

base_dir = './'
src_dst_map = {
   'session': 'files1',
   'process': 'files2',
   'progress': 'files2'
}

for child in os.listdir(base_dir):
    # print(child)
    child_path = os.path.join(base_dir, child)
    # print(child_path)
    # src_path = os.path.join(child_path, 'session')
    # print(src_path)
    for src, dst in src_dst_map.items():
        # print(src)
        src_path = os.path.join(child_path, src)
        dst_path = os.path.join(child_path, dst)
        print(src_path)
        print(dst_path)
        for root, dirs, files in os.walk(src_path):
            # print(root)
            for file in files:
                # print(file)
                srce_path = os.path.join(root, file)
                print(srce_path)
                shutil.move(srce_path, dst_path)
        shutil.rmtree(src_path, ignore_errors = True)
雅各布

老实说,这已经很简洁了,它可以完成工作,所以我不会太费心去改变它。您的代码运行 10 行(加上字典和基本路径的设置)。

关于重复的图像,您可以检查fileindst_path是否存在,如果存在,请向复制的文件添加前缀(或后缀)。

下面根据来源添加前缀,直到找到唯一的文件名。如果在一个子文件夹中有多个相同文件的副本,这也会引起注意。您可以根据您的特定需求更改此设置,但它应该为您提供总体思路。

...

    for root, dirs, files in os.walk(src_path):
        for file in files:
            srce_path = os.path.join(root, file)
            while os.path.isfile(os.path.join(dst_path, file)):
                file = '_'.join([src, file])
            shutil.move(srce_path, os.path.join(dst_path, file))

我选择了前缀,因为这更容易实现。必须在文件名和文件结尾之间添加后缀,这需要一些额外的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取子目录中包含特定目录字符串的子目录中python文件的路径

将子目录的所有内容递归移动到python中的父目录

Python:遍历目录树并检查最后一个子目录是否有文件

根据两个列表将文件从子目录复制并重命名到不同的子目录?

根据过滤的数据移动目录和子目录

将子目录中的文件移动到另一个目录

根据条件将子目录作为根目录

根据目录名称将目录划分为子目录

从所有子目录移动特定文件,并根据子目录重命名

如何根据文件大小将多个文件分离到一个子目录中?

在Python中制作多个子目录

如何将文件从一个子目录移动到第一个子目录之外的另一个子目录?

如何遍历目录中的子目录并计算python中子目录中的文件

如何将子目录移动到同一目录中的另一个子目录中?

Python脚本根据文件名提取所有子目录

根据子目录名称将文件从特定子目录复制到单个目录中,然后重命名

AWK-创建新的子目录并根据文件名将文件移动到该子目录中

我如何才能导入一个子目录并在python中使用“ subdir.pythonfile.function”?

根据第一个字符将目录移动到子目录中

Python 3.5.2:导入一个类,该类在子目录中导入另一个类

子目录中的foreach python文件

python根据名称将一个列表中的文件与另一个列表中的文件进行匹配

根据文件名与另一个文件匹配将文件移动到不同的目录中

将 css 文件从一个子目录复制到 CONTAINER BLOB 中的另一个子目录

使用 Python 按名称复制特定子目录

如何在多个子目录中找到相同扩展名的所有文件并使用 python 将它们移动到单独的文件夹?

Python:搜索特定文件类型的目录和子目录

使用pathlib根据file.name将文件从子目录复制到其他子目录

如何识别路径是否包含 Python 中的最后一个子目录?