Python: 合并来自下方目录的文件与 os。

2024-03-28 15:04:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我想复制一个文件夹结构并将其整齐地组合到另一个文件夹结构中。我的问题是使用os.步行当它找到第一个文件所在的文件夹,然后将该目录下的所有文件合并到一个列表中时,我似乎找不到停止的方法。你知道吗

例如:

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

如果我想把所有文件从这个文件夹移到下一个文件夹中,那么我就把它们从这个文件夹移到下一个文件夹中列表等。。。你知道吗

我目前面临的问题是,当我到达最子文件夹时,它会将此作为一个单独的列表来复制文件,当我真的希望最上面的文件夹包含文件时,再将下面的所有文件合并。你知道吗

如果你检查下面的输出代码,我的主要问题是'华丽的时钟'输出两个单独的列表,当我想在这个文件夹中的所有文件被合并。你知道吗

仅供参考:我使用了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...

Tags: 文件to文件夹列表islibraryfilesfolder