我有一个文件名列表(数万个),我想在目录中找到它。对于所有位于的文件,必须将它们复制到单个输出文件夹中。
使用Python,在您看来,会是最有效的*策略吗?我不是在寻找解决方案,而是寻求入门的好策略。
*在脚本执行不应该“生长”的意义上是高效的。系统的资源。其他更重要的应用程序可能同时运行。
非常感谢!
答案 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