Python:在目录中搜索列表中的文件

时间:2014-09-12 19:30:50

标签: python

上下文

我有一个文件名列表(数万个),我想在目录中找到它。对于所有位于的文件,必须将它们复制到单个输出文件夹中。

使用Python,在您看来,会是最有效的*策略吗?我不是在寻找解决方案,而是寻求入门的好策略。

要打破这个:

  • 如何存储文件名列表以及搜索文件名是否在列表中的方法?
  • 如何浏览整个目录,逐个文件夹,并考虑每个文件?
  • 如何复制文件(处理时间最短)?

买者

*在脚本执行不应该“生长”的意义上是高效的。系统的资源。其他更重要的应用程序可能同时运行。

非常感谢!

2 个答案:

答案 0 :(得分:1)

import os
import shutil

filenames_i_want = set() # fill this with the filenames you want
dest_dir = 'whatever'
src_dir = 'whatever'

for (dirpath, dirnames, filenames) in os.walk(src_dir):
    for fname in filenames:
        if fname in filenames_i_want:
            shutil.copy(os.path.join(dirpath, fname), dest_dir)

如果这证明太慢use a profiler来找出缓慢的部分并从那里进行优化。

如果您发现shutil.copy速度较慢,请参阅"Python copy larger file too slow"

答案 1 :(得分:0)

我认为这样可行(使用Python 2.7,因为你没有提到Python版本):

import os, shutil, sys

_files = []

dir = sys.argv[1]
targetDir = sys.argv[2]
endings = sys.argv[3:]

for root, dirs, files in os.walk(dir) :
    for ending in endings :
        if file.endswith(ending) :
            shutil.copy(os.path.join(root, file), os.path.join(targetDir, file)
            _files.append(file)
print _files

值得注意的一点是,你必须这样称呼它:

python copyFiles.py /User/YourName/Documents/ /User/YourName/Desktop/ .txt