-6

假设我有以下目录结构:

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,遍历目录中的每个文件并检查文件名(忽略扩展名)是否是一个 duretiry在ToDirectory结构中,如果没有,请创建它并将文件复制到其中,并在其名称的开头附加父目录并使用 python?

我在一系列下一个循环中使用 os.listdir 和 os.isdir ,但它似乎很长,虽然它可以工作,但似乎效率低下......

4

2 回答 2

0

您可以使用递归而不是显式嵌套循环来实现更短的代码。

递归并不总是更有效,但您的代码看起来会更好!

于 2012-09-04T21:49:56.120 回答
0

试试python的高级文件操作库(import shutil

也可以考虑使用pythons优秀的目录遍历功能(from os import walk

您不需要复制文件,只需重命名目录和文件名。

于 2012-09-04T23:55:03.113 回答