我怎样才能着手做这件事呢?我有一个包含很多子文件夹和文件的大文件夹,我想用存储在其他地方的包含相同文件结构的其他文件夹和文件替换多个特定文件夹和文件
BigFolder
|
|--Folder 1
|--Folder 2
|--Folder 3
|--Folder 4
|--File 1
|--File 2
"Backup 1"
|
|--Folder 1
|--Folder 3
|--File 2
"Backup 2"
|
|--Folder 1
|--Folder 3
|--File 2
"Backup 3"
|
|--Folder 1
|--Folder 3
|--File 2
我把“备份”放在引号里,因为这不是真正的目的,但举个例子,它是有效的。所以我应该能够抓取大文件夹的特定内容并将其放入其中一个备份中,然后再进行另一个备份并抓取其内容并将其放入大文件夹中,基本上进行交换。我怎样才能做到这一点?我尝试使用shutil.copytree,但这会引发一个错误,因为我要复制到的文件夹已经存在,非常愚蠢。我还尝试了distutils的copytree,但虽然它可以工作,但它不会复制我想要的文件夹,只复制内容,因此它不会保留文件结构
import shutil
bigFolder = "/home/user/Big Folder"
def swapFiles(newFolder, prevFolder):
path = os.path
#Copy from big folder to the previous backup
shutil.copytree(path.join(bigFolder, "Folder 1"), prevFolder)
shutil.copytree(path.join(bigFolder, "Folder 3"), prevFolder)
shutil.copy(path.join(bigFolder, "File 2"), prevFolder)
#Copy from new folder to big folder
shutil.copytree(newFolder, bigFolder)
这不起作用,因为目标文件夹已经存在,它只对不存在的文件夹起作用。带distutils:
from distutils.dir_util import copy_tree
import shutil
bigFolder = "/home/user/Big Folder"
def swapFiles(newFolder, prevFolder):
path = os.path
#Copy from big folder to the previous backup
copy_tree(path.join(bigFolder, "Folder 1"), prevFolder)
copy_tree(path.join(bigFolder, "Folder 3"), prevFolder)
shutil.copy(path.join(bigFolder, "File 2"), prevFolder) #shutil is fine here
#Copy from new folder to big folder
copy_tree(newFolder, bigFolder)
这不起作用,因为它复制文件夹的内容,而不是文件夹本身,所以我不保留文件结构
顺便说一下,在这两个复制过程中间,我应该删除文件和文件夹以避免与NeXFLASH的文件夹合并,但这与问题无关。p>
我找到了一个解决方案,结果证明,shutil的愚蠢限制,即只能将文件复制到不存在的文件夹中,这一限制毕竟是有用的,但我还需要使用distutils的copy_tree函数,幸运的是它们都是stdlib。首先,创建一个包含所有要复制的文件和文件夹的列表,如下所示:
然后我们需要为每个阶段创建两个循环
这样,文件结构就得到了维护,并且很容易指定要交换的文件和文件夹
资料来源:https://lukelogbook.tech/2018/01/25/merging-two-folders-in-python/
相关问题 更多 >
编程相关推荐