如何使用文件的唯一名称创建多个副本并将新副本放入 Python 中的多个文件夹?

How to create multiple copies with unique names of a file and put new copies into multiple folders in Python?

各位大神帮我理清解决问题的思路。

在 Python 中,我想编写一个代码,生成单个文件的具有唯一名称(基于某些规则)的多个副本,并将所有新副本放入多个文件夹中。我会演示一些图片。

我之前创建的所有结构。

现在我想克隆文件 "tile.png" 并将其副本生成为:“0.png”、“1.png”等等。这些名字实际上是基于一个规则png_file_names = [j for j in range(0, 2 ** zoom)]。在我获得具有新名称的文件 'tile.png' 的确切副本数量后,我想将它们全部复制到每个子文件夹中:'0'、'1'、'2'、'3',您可以在我的三.

据我所知,我需要应用多个循环。谢谢你们!这是我现在拥有的代码:

def create_copies_of_a_tile (zoom):
    path_to_the_project = 'D:/ms_project'
    os.chdir(path_to_the_project)
    for j in range (0, 2**zoom):
        shutil.copy2('tile.png', '{}.png'.format(j))

创建子目录后,此脚本会将文件复制到名为 0,1,2... 的子目录:

import shutil, os

def copytoSub(filename, zoom):
    extension = os.path.splitext(filename)[-1]

    for i in range (0, 2**zoom):
        i = str(i)
        newfile = i + extension
        os.mkdir(i)                                     # make i named subdir
        shutil.copy2(filename, i + os.sep + newfile)   # copy i named file to i named subdir

if __name__ == '__main__':
    copytoSub("copy.py", 3)

*注意:我不认为您需要当前工作目录中原始文件的复制文件,因为原始文件 tile.png 是已经在那里了,我假设你只需要在子目录中复制它。

经过一些尝试,我找到了解决方案:

def create_copies_of_a_tile (zoom):
    path = 'D:/ms_project/tiles/'
    for zoom_level in range (zoom_min, zoom + 1):
        subfolders_path = os.path.join(path, str(zoom_level))
        for xtile_number in range(0, 2 ** zoom):
            sub_subfolders_path = os.path.join(subfolders_path, str(xtile_number))
            for dirpath, dirnames, files in os.walk(sub_subfolders_path):
                os.chdir(dirpath)
                for j in range(0, 2 ** zoom):
                    shutil.copy2('D:/ms_project/tile.png', '{}.png'.format(j))

它正在工作,但我不明白一件事。当我从前一个 "for statement" for dirpath, dirnames, files in os.walk(sub_subfolders_path): 中删除 dirnames, files 时(我相信我不需要那个部分),我确实有一个错误:

TypeError: chdir: illegal type for path parameter

谁能这么好心给我解释一下这是怎么回事?谢谢

而且我想知道是否可以稍微简化我的代码。谢谢大家)

还有一个问题是如何对图片上的文件夹进行排序?谢谢