Python:在目录中查找列表中的文件

-3 投票
2 回答
1990 浏览
提问于 2025-04-21 09:18

背景

我有一个文件名的列表(有好几万个),我想在一个文件夹里找到这些文件。所有找到的文件都必须复制到一个单独的输出文件夹里。

用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复制大文件太慢”这个讨论。

撰写回答