假设我有以下目录结构:
C:\Test
C:\Test\2009
C:\Test\2009\files\Artists
C:\Test\2009\files\Artists\SnoopDog
C:\Test\2009\files\Artists\SnoopDog\albums.txt
C:\Test\2009\files\Artists\SnoopDog\albums.jpg
C:\Test\2009\files\Artists\SnoopDog\hobbies.doc
C:\Test\2009\files\Artists\SmashMouth\albums.txt
C:\Test\2009\files\Artists\SmashMouth\hobbies.doc
C:\Test\2010\files\Artists\SnoopDog\albums.txt
C:\Test\2010\files\Artists\SnoopDog\albums.jpg
C:\Test\2010\files\Artists\SnoopDog\hobbies.doc
以下是我想要的目标结构:
C:\ToDirectory\
C:\ToDirectory\2009\albums\SnoopDog_albums.txt
C:\ToDirectory\2009\albums\SnoopDog_albums.jpg
C:\ToDirectory\2009\albums\SmashMouth_albums.txt
C:\ToDirectory\2009\albums\SmashMouth_albums.jpg
C:\ToDirectory\2009\hobbies\SmashMouth_hobbies.doc
C:\ToDirectory\2009\hobbies\SnoopDog_hobbies.doc
C:\ToDirectory\2010\albums\SnoopDog_albums.txt
C:\ToDirectory\2010\albums\SnoopDog_albums.jpg
假设C:\Test
包含所有文件,C:\ToDirectory
作为空目录开始。
有一个函数的最有效方法是什么,我只是给它的源目录C:\Test
和一个目标目录ToDirectory
,并且脚本进入C:\Test
的最低级别,去通过目录中的每个文件,检查文件名(忽略扩展名)是ToDirectory
结构中的durectiry,如果没有,创建它并将文件复制到其中,并在其名称的开头附加父目录蟒?
我在一系列nexted循环中使用os.listdir和os.isdir,但它看起来非常冗长,虽然它确实起作用,但看起来效率低下......
答案 0 :(得分:0)
您可以使用递归而不是显式嵌套循环来实现更短的代码。
递归并不总是更有效,但你的代码看起来会更好!。
答案 1 :(得分:0)