如何解决用于确定目录和嵌套子目录中是否存在许多文件的更高效的Python脚本
我正在寻找一种算法,该算法需要很长的文件路径列表,检查每个文件路径是否存在于文件目录中,并返回列表中不存在的文件路径。
有很多问题询问如何在目录及其子目录中查找单个文件,但是当在目录或子目录中搜索成百上千个文件作为解决方案时,这些问题无法扩展这些问题涉及每次搜索都使用os.walk。要么针对每个有问题的文件遍历整个目录,要么针对每个目录遍历文件列表。我将浏览一棵大目录树,因此对每个文件都要花很长时间。我认为最有效的解决方案是遍历目录结构一次并从文件构建字典。
我目前的工作是抓取整个目录结构并构建字典。对于一个字典,键是文件的大小,值是具有该大小的文件的列表。另一个字典是键,是文件的哈希,值是具有该哈希的所有文件的路径列表。 然后,我遍历文件列表中的所有文件,以查看其密钥是否在size_dict.keys()或hash_dict.keys()中。如果是这样,我将其从文件列表中删除。这是伪代码,表示我所做的事情:
def file_hunter(list_of_files,search_directory):
size_dict = defaultdict(list)
hash_dict = defaultdict(list)
#populate dictionaries with files in the search_directory
for root,dirs,files in os.walk(search_directory):
for search_file in files:
add_file_to_dictionaries(search_file)
#iterate over list_of_files and check them against the populated dictionaries
for file in list_of_files:
if not size_dict[file.size]:
list_of_files.remove(file)
else: #trying to avoid having to hash every file
if not hash_dict[hash(file)]:
list_of_files.remove(file)
else:
continue
return list_of_files #returning list of files not in search_directory
...其中list_of_files是我要查找的文件的路径列表,search_directory是我要在其中查找文件的目录的路径。 我将在大小不同的文件列表和目录上运行此脚本,但是它们几乎都很大。有关如何提高效率的任何提示?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。