如何使用文件的唯一名称创建多个副本并将新副本放入 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
谁能这么好心给我解释一下这是怎么回事?谢谢
而且我想知道是否可以稍微简化我的代码。谢谢大家)
还有一个问题是如何对图片上的文件夹进行排序?谢谢
各位大神帮我理清解决问题的思路。
在 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
谁能这么好心给我解释一下这是怎么回事?谢谢
而且我想知道是否可以稍微简化我的代码。谢谢大家)
还有一个问题是如何对图片上的文件夹进行排序?谢谢