python學習筆記6——文件操作來生成船只側面圖像的描述文件

最近在做船只檢測的工作需要大量的正樣本,之前的一些樣本各種形態的船只都有,這一次訓練分類器希望使用只含船只側面的圖像,這樣檢測船的側面的成功率可能會提高一點。這樣就需要大量的船只側面圖像,并生成描述文件。這里我們之前已經生成過全船只的描述文件,只需要挑出側面的圖像,然后根據有的圖像從原描述文件中選取存在的圖像的描述信息保存在新的描述文件
描述文件的內容大概是這個樣子的

224871_0.jpg 1 6 50 248 82
224871_10.jpg 1 16 79 269 89
224871_11.jpg 1 80 53 122 40
224871_12.jpg 1 53 57 219 79
224871_13.jpg 1 16 94 251 72
224871_14.jpg 1 20 79 197 66
224871_15.jpg 1 6 69 294 98
224871_16.jpg 1 91 86 155 54
224871_17.jpg 1 51 70 202 72
224871_18.jpg 1 6 42 294 99
224871_19.jpg 1 9 36 291 98
224871_1.jpg 1 37 77 243 81
224871_20.jpg 1 27 27 248 83
224871_21.jpg 1 40 63 250 80
224871_22.jpg 1 18 65 234 78
224871_23.jpg 1 12 51 272 89
224871_24.jpg 1 21 83 252 73
224871_25.jpg 1 32 62 230 75
224871_26.jpg 1 0 61 298 99
224871_27.jpg 1 8 100 271 83
224871_28.jpg 1 0 60 275 92
224871_29.jpg 1 72 100 151 49
224871_2.jpg 1 62 46 179 60
224871_30.jpg 1 137 64 149 49
224871_31.jpg 1 34 119 240 80

思路很簡單,就是讀一行看看那個jpg文件在不在文件夾里面,如果在的話,就把這行復制進新的描述文件。

第一個代碼

import glob,os
unfound=0 (u'D:/IP_CV_WorkSpace/Img/第三批分類器/pos8/*.jpg')]
with open(u'D:/IP_CV_WorkSpace/Img/第三批分類器/pos8/info.txt', 'r') as f:
    with open(u'D:/IP_CV_WorkSpace/Img/第三批分類器/pos8/pos8.txt', 'w') as w:
        for filetitle in f.readlines():
            if filetitle.split(u' ')[0] in [os.path.split(filename)[-1] for filename in glob.glob (u'D:/IP_CV_WorkSpace/Img/第三批分類器/pos8/*.jpg')]:
                w.write(filetitle)
            else:
                unfound=unfound+1        
        print u'一共有%s個圖片沒找到' % unfound   

這個代碼挺短的,但是云訊速度卻很慢原因在于第6行每次都要算一下整個集合,太慢了,所以可以優化

第二個代碼

import glob,os
unfound,filenamelist=0,[os.path.split(filename)[-1] for filename in glob.glob (u'D:/IP_CV_WorkSpace/Img/第三批分類器/pos8/*.jpg')]
with open(u'D:/IP_CV_WorkSpace/Img/第三批分類器/pos8/info.txt', 'r') as f:
    with open(u'D:/IP_CV_WorkSpace/Img/第三批分類器/pos8/pos8.txt', 'w') as w:
        for filetitle in f.readlines():
            if filetitle.split(u' ')[0] in filenamelist:
                w.write(filetitle)
            else:
                unfound=unfound+1        
        print u'一共有%s個圖片沒找到' % unfound   

同樣行數的代碼速度提高了

第三個代碼

import glob,os
unfound,filenamelist=0,[os.path.split(filename)[-1] for filename in glob.glob (u'D:/IP_CV_WorkSpace/Img/第三批分類器/pos8/*.jpg')]
with open(u'D:/IP_CV_WorkSpace/Img/第三批分類器/pos8/info.txt', 'r') as f:
    with open(u'D:/IP_CV_WorkSpace/Img/第三批分類器/pos8/pos8.txt', 'w') as w:
        filelist=f.readlines();
        found=[w.write(filetitle) for filetitle in filelist if filetitle.split(u' ')[0] in filenamelist]        
        print u'一共有%s個圖片沒找到' % (len(filelist)-len(found))

使用列表生成器代碼更短啦

版權聲明:本文為博主原創文章,歡迎轉載和分享,但請聲明出處
http://blog.csdn.net/zhzz2012/article/details/47979387

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容