Python:将以下目录中的文件与os.walk

时间:2019-06-22 07:09:53

标签: python os.walk

我想复制一个文件夹结构并将其整齐地组合到另一个文件夹结构中。我的问题是,使用os.walk时,似乎找不到找到第一个找到的文件夹的文件夹,然后将该目录下所有下面的文件合并到一个列表中的方法。

例如:

Library (root directory)
-Accessories
--Clock
---Clock.3ds
---Maps
----Map1.jpg
----Map2.jpg

-Dining Chairs
--Dining Chair1
---DiningChair1.3ds
---Maps
----DiningChair.jpg

--DiningChair2
---3D
----DiningChair2.3ds
----DiningChair2.jpg

最终结果:

Library (root directory)
-Accessories
--Clock
---Clock.3ds
---Maps
----Map1.jpg
----Map2.jpg

例如,当我到达Clock.3ds时,我希望它从此处向下移动,收集所有子目录中的所有文件并将它们放入列表中,然后移动到下一个文件夹Dining Chairs(如果只有文件夹)在此目录中,下移到Dining Chairs 1,该文件具有.3ds文件(或任何文件),将子目录中的所有文件复制到列表中,等等。

我当前面临的问题是,当我到达子目录中的最子文件夹时,它将其视为复制文件的单独列表,当我真的想要最上面的文件夹中的文件,然后合并此目录下的所有文件时。

>

如果您检查下面的输出代码,当我希望合并此文件夹中的所有文件时,主要问题是输出两个单独列表的“华丽时钟”。

仅供参考:我使用topdown = False希望我可以采取相反的方式-如转到子目录下的目录,向上直到到达没有文件的文件夹,然后复制下面的所有文件,然后标记该目录完成后,继续前进。

import os
import shutil

INPUT_DIRECTORY = 'C:/Users/James/Work/Personal/Python/Projects/3DLibrary/Library_Test/'

# 3D file extensions.
FILE_EXTENSION_3D = (('.max', '.fbx', '.obj', '.skp', '.dwg', 'dxf', '.3ds'))

# Image Extensions
FILE_EXTENSION_2D = (('.jpg', 'jpeg','.png', '.tif', '.tiff', '.bmp', '.gif', '.psd', '.raw', '.ai', '.eps', '.svg', '.svgz'))

ignoreList = []
collectedFiles = []
# Go to child most folder.
for dirpath, dirnames, filenames in os.walk(INPUT_DIRECTORY, topdown=False):
    rootDirectory = False
    while not rootDirectory:
        # Add files to list until reach parent with no files.
        print('PATH IS: ', dirpath)
        for directory in dirnames:
            print('DIRECTORY IS:', directory)
        # Create a list of found files to collectedFiles list.
        collectedFiles.append(filenames)
        # Add this parent folder to a foundDirectory list.
        currentDirectory = dirpath
        ignoreList.append(currentDirectory)
        #print(ignoreList)
        # Copy collected files to folder.
        print('Copy collected files to folder...')
        print(collectedFiles)
        print()
        # Reset collectedFiles list.
        collectedFiles = []
        break

输出:

PATH IS: C:/Users/James/Work/Personal/Python/Projects/3DLibrary/Library_Test/3DD_Vase 
Copy collected files to folder... 
[['3DD_Vase.jpg', '3DD_Vase.max', 'red.jpg', 'stripes.jpg']]

PATH IS: C:/Users/James/Work/Personal/Python/Projects/3DLibrary/Library_Test/Accessories\ornate clock\3d 
Copy collected files to folder... 
[['clock.max']]

PATH IS: C:/Users/James/Work/Personal/Python/Projects/3DLibrary/Library_Test/Accessories\ornate clock 
DIRECTORY IS: 3d 
Copy collected files to folder... 
[['clock.jpg']]

etc...

0 个答案:

没有答案