每个子目录仅将一个文件移动到新的子目录

时间:2019-07-10 21:40:11

标签: python file directory path os.walk

我对将每个子目录中的一个文件移动到其他新子目录有疑问。因此,例如,如果我有图片中显示的目录

enter image description here

然后,我只想选择每个子目录中的第一个文件,然后将其移动到另一个新的子目录中,其名称与从图像中看到的名称相同。这是我的预期结果

enter image description here

我尝试使用os.walk选择每个子目录的第一个文件,但是我仍然不知道如何将其移动到同名的另一个子目录

path = './test/'
new_path = './x/'

n = 1
fext = ".png"

for dirpath, dirnames, filenames in os.walk(path): 
    for filename in [f for f in filenames if f.endswith(fext)][:n]:
        print(filename) #this only print the file name in each sub dir

预期结果可以在上图中看到

1 个答案:

答案 0 :(得分:0)

您快到了:)

您需要的是拥有完整的文件路径:旧路径(现有文件)和新路径(您要将文件移动到的位置)。

this post中所述,您可以在Python中以不同的方式移动文件。您可以使用“ os.rename”或“ shutil.move”。

这是经过全面测试的代码示例:

import os, shutil

path = './test/'
new_path = './x/'

n = 1
fext = ".png"

for dirpath, dirnames, filenames in os.walk(path): 
    for filename in [f for f in filenames if f.endswith(fext)][:n]:
        print(filename) #this only print the file name in each sub dir

        filenameFull = os.path.join(dirpath, filename)
        new_filenameFull = os.path.join(new_path, filename)

        # if new directory doesn't exist - you create it recursively
        if not os.path.exists(new_path):
            os.makedirs(new_path)        

        # Use "os.rename"
        #os.rename(filenameFull, new_filenameFull)

        # or use "shutil.move"
        shutil.move(filenameFull, new_filenameFull)