【发布时间】:2023-04-21 14:25:01
【问题描述】:
我有一个大型图像文件存储库(约 200 万个,.jpg),各个 id 分布在多个子目录中,我正在尝试在包含约 1,000 个子集的列表中查找和复制每个图像身份证。
我对 Python 还是很陌生,所以我的第一个想法是使用 os.walk 遍历每个文件的 1k 子集,以查看子集中是否有任何匹配 id。这至少在理论上是可行的,但在每秒 3-5 张图像的情况下,它似乎非常慢。一次查找一个 id 的所有文件似乎也是如此。
import shutil
import os
import csv
# Wander to Folder, Identify Files
for root, dirs, files in os.walk(ImgFolder):
for file in files:
fileName = ImgFolder + str(file)
# For each file, check dictionary for match
with open(DictFolder, 'r') as data1:
csv_dict_reader = csv.DictReader(data1)
for row in csv.DictReader(data1):
img_id_line = row['id_line']
isIdentified = (img_id_line in fileName) and ('.jpg' in fileName)
# If id_line == file ID, copy file
if isIdentified:
src = fileName + '.jpg'
dst = dstFolder + '.jpg'
shutil.copyfile(src,dst)
else:
continue
我一直在考虑尝试自动执行查询搜索,但数据包含在 NAS 上,我没有简单的方法来索引文件以加快查询速度。我运行代码的机器是 W10,因此我不能使用 Ubuntu Find 方法,我收集到的方法在此任务上要好得多。
任何加快这个过程的方法都将不胜感激!
【问题讨论】:
-
您需要利用多处理来加快速度
-
补充@gold_cy 所说的内容,建立某种索引以加快未来的搜索速度可能会有所帮助
-
您应该为所有可以查询的文件创建索引/查找
-
@Alex 我很欣赏索引会加快进程,但是 afaik,这将需要管理员访问驱动器,我很遗憾无法获得
-
如果您无权确定文件的位置,您打算如何复制文件?
标签: python python-3.x os.walk