最近華為云發(fā)布了垃圾分類識別的比賽熬荆,就注冊賬號钞螟,想看看兔甘。從官網(wǎng)上下載了數(shù)據(jù),發(fā)現(xiàn)圖片和txt文檔是放在一個文件夾里的鳞滨。其中命名對應(yīng)的txt中是標(biāo)明了該圖片的垃圾分類ID
華為垃圾分類文件夾.png
垃圾分類ID.png
但其實在分析數(shù)據(jù)的過程中洞焙,我希望查看一下每個分類下面的圖片的情況,所以希望按照將同一個分類的圖片能放在同一個文件夾中,以方便查看澡匪。 這時候熔任,就用了到了shutil庫
同時,因為類目ID和垃圾分類類目的關(guān)系存儲在了另外的一個JSON文件中唁情,也需要將其讀取進來疑苔,然后根據(jù)映射情況來命名文件夾
具體的代碼和詳細(xì)備注如下:
#coding:utf-8
import os
import json
import shutil
import re
#讀取下載的文件
f_list = os.listdir('下載的文件地址路徑')
#將類目ID同分類映射的JSON文件讀進來
with open('JSON文件地址路徑', encoding='utf-8') as f:
rules = json.loads(f.read())
f.close()
#開始來拷貝文件了
for file in f_list:
#由于文件夾中有txt文件和jpeg兩種格式,需要進行處理甸鸟,讀取txt格式文件
if os.path.splitext(file)[1] == '.txt':
imgID =file.replace('.txt','')
f=open('下載的文件地址路徑'+'/'+file,'r+').readlines()
file_name,cateID=f[0].split(',')
#小細(xì)節(jié)處理惦费,因為上一步對文件處理提取cateID是,得到的格式是‘ 1’而不是‘1’抢韭,故需要處理一下用re庫的replace刪除
fold_name=rules[cateID.replace(' ','')]
#另一處小細(xì)節(jié)處理薪贫,看上圖可以看到數(shù)據(jù)中的命名為'可回收垃圾/舊衣服',這樣在Python路徑中作為文件名會導(dǎo)致多一層文件刻恭,故改成了’可回收垃圾_舊衣服‘
fold_name=fold_name.replace('/','_')
#設(shè)置最后要拷貝的文件名稱
determination = '文件夾路徑名'+fold_name+'/'
#判斷文件夾是否存在
if not os.path.exists(determination):
os.makedirs(determination)
#從一個文件中往另外一個文件夾移動文件
shutil.copyfile('下載的文件地址路'+file_name, determination+file_name)
print('Done')
最后可以看到拷貝移動完后的結(jié)果如下圖:
拷貝完后端結(jié)果.png