如何使用python将具有特定前缀的所有文件复制到新目录?

时间:2012-09-04 20:57:12

标签: python algorithm

假设我有以下目录结构:

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,但它看起来非常冗长,虽然它确实起作用,但看起来效率低下......

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

尝试pythons高级文件操作库(import shutil

还要考虑使用pythons优秀的目录行走功能(from os import walk

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