我有2个文件夹。第一个(称为A)包含以下形式命名的相同图像:subject_incrementalNumber.jpg(其中incrementalNumber从0到X)。加快创建路径名称
然后,我处理包含在文件夹A中的每个图像,并从中提取一些小块,然后将每个小块保存在文件夹B中,其名称为subject(与文件夹A中包含的原始图像相同)_incrementalNumber(与文件夹相同A)_anotherIncrementalNumber(区分一件和另一件)。
最后,我删除文件夹A.
A
subjectA_0.jpg
subjectA_1.jpg
subjectA_2.jpg
...
subjectB_0.jpg
B
subjectA_0_0.jpg
subjectA_0_1.jpg
subjectA_1_0.jpg
subjectA_2_0.jpg
...
每次我下载一个主题的新形象处理后的图像,并将其保存在文件夹中,我不得不计算出新的路径名该图像(I必须找到可用于特定主题的min incrementalNumber)。问题是,当我处理图像时,我将它从文件夹A中删除,而我只将这些文件存储在文件夹B中,因此我必须在两个文件夹中找到可用的最小编号。
现在我用下面的函数来创建路径
output_name = chooseName(subject, folderA, folderB)
# Create incremental file
# If the name already exist, try with incremental number (0, 1, etc.)
def chooseName(owner, dest_files, faces_files):
# found the min number available in both folders
v1 = seekVersion_downloaded(owner, dest_files)
v2 = seekVersion_faces(owner, faces_files)
# select the max from those 2
version = max(v1, v2)
# create name
base = dest_files + os.sep + owner + "_"
fname = base + str(version) + ".jpg"
return fname
# Seek the min number available in folderA
def seekVersion_folderA(owner, dest_files):
def f(x):
if fnmatch.fnmatch(x, owner + '_*.jpg'): return x
res = filter(f, dest_files)
def g(x): return int(x[x.find("_")+1:-len(".jpg")])
numbers = map(g, res)
if len(numbers) == 0: return 0
else: return int(max(numbers))+1
# Seek the min number available in folderB
def seekVersion_folderB(owner, faces_files):
def f(x):
if fnmatch.fnmatch(x, owner + '_*_*.jpg'): return x
res = filter(f, faces_files)
def g(x): return int(x[x.find("_")+1:x.rfind("_")])
numbers = map(g, res)
if len(numbers) == 0: return 0
else: return int(max(numbers))+1
它的工作原理,但这个过程需要大约10秒为每个图像,因为我有很多的图片,这是效率太低。 有任何解决方法使其更快?
,如果你使用的是随机生成一个确保它不会与现有的第一碰撞。 – 2011-03-13 21:56:49
@archimedes确实! – 2011-03-13 21:59:13
@David:你的想法很好,但问题是主题的名称必须是路径名(这不是我的选择)。所以我可以创建一个隐藏文件,其中每行包含主题名称和最小可用编号。同样在这种情况下,我有一个开销,但这可能是当前的小事。 – 2011-03-13 22:31:49