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

时间:2017-06-12 07:59:11

标签: python file-rename file-copying

亲爱的,请帮助我澄清可以解决我的问题的思维方式。

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

A scheme of a project 我之前创建的所有结构。

现在我要克隆文件" 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))

2 个答案:

答案 0 :(得分:1)

此脚本将在创建子目录后将文件复制到名为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 已经存在,我假设你只需要在子目录中复制它。

答案 1 :(得分:0)

在一些试验执行后,我找到了解决方案:

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”dirnames, files中删除for dirpath, dirnames, files in os.walk(sub_subfolders_path):时(我相信我不需要这些部分),我确实有错误:

  

TypeError:chdir:路径参数的非法类型

有人可以这么善良并向我解释发生了什么事吗?谢谢

我也想知道是否有可能简化我的代码。谢谢大家)

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