Python:在目录中查找列表中的文件
背景
我有一个文件名的列表(有好几万个),我想在一个文件夹里找到这些文件。所有找到的文件都必须复制到一个单独的输出文件夹里。
用Python的话,你觉得最有效率的策略是什么?我不是在找具体的解决方案,而是想要一个好的开始策略。
具体来说:
- 这个文件名列表应该怎么存储?如果要查找某个文件名在列表中,应该用什么方法?
- 怎么逐个文件夹地遍历整个目录,考虑每一个文件?
- 怎么复制文件(尽量减少处理时间)?
注意事项
*这里的“有效率”是指脚本运行时不应该占用太多系统资源。因为可能还有其他更重要的应用程序在同时运行。
非常感谢!
2 个回答
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
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)
如果你觉得这个方法太慢,可以使用性能分析工具来找出哪些地方运行得慢,然后进行优化。
如果你发现shutil.copy
这个函数很慢,可以看看“Python复制大文件太慢”这个讨论。