我有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