首頁  >  文章  >  後端開發  >  如何透過Python批次處理套娃式資料夾

如何透過Python批次處理套娃式資料夾

coldplay.xixi
coldplay.xixi轉載
2020-08-24 17:14:482344瀏覽

如何透過Python批次處理套娃式資料夾

【相關學習推薦:python教學

前言

在我對項目組的一些訓練圖像進行預處理的時候,發現處理的圖像是分好了類,在文件夾裡的文件夾裡,套娃式存儲的,所以對我批處理,以及按原資料夾規則進行儲存的時候,就會造成很大困擾
但透過下面幾個函數的結合,幫我順利的完成了一系列的預處理。

一、用不膩的芷山庫

#1.安裝庫

pip安裝:

pip install zisan

2.getFiles函數

函數呼叫:

import zisan.FileTools as zf
file_path = 'C:/Users/xxx/Desktop/2016/Annotations'
whole_file = zf.getFiles(file_path)

圖片儲存在:件夾2016 -> 資料夾Annotations -> ;子資料夾-> 00000.png
透過getFiles函數,可以將Annotations中的所有資料夾裡的所有圖片路徑調出來

也就是說,getFiles函數是將資料夾裡面的所有檔案路徑都調出來,不管中間有無子資料夾

二、其他函數

1.os.listdir函數

此函數呼叫後會傳迴路徑底下資料夾的名稱,以字串的形式儲存在清單中

程式碼如下:

import os
file_path = 'C:/Users/xxx/Desktop/2016/Annotations'
file_names = os.listdir(file_path)
print(file_names)

效果:


#2.os.mkdir函數

程式碼:

import os
new_file_path = 'C:/Users/xxx/Destop/2016/newfile'
os.mkdir(new_file_path)

用於建立新資料夾

三、運用

要求:處理Annotations資料夾中的每個子文件夾中的圖片,並依原本的規則儲存在newfile新資料夾裡的對應位置,命名規則如00000.jpg

import zisan.FileTools as zf
import os
import cv2
from skimage import io

file_path = 'C:/Users/xxx/Desktop/2016/Annotations'
new_file_path = 'C:/Users/xxx/Destop/2016/newfile'

file_names = os.listdir(file_path)
#获取Annotations文件夹的子文件夹名称

for i in file_names: #遍历每个子文件夹名称
  Index = 0
  file_name = file_path + '/' + i #巧妙运用+号得到改子文件夹的路径
  os.mkdir(new_file_path + '/' + i) #在newfile里创建一个与子文件夹名称相同的文件夹
  whole_pic = zf.getFiles(file_name) #用getFiles函数读取子文件夹内的图片路径
  for f in whole_pic:
    msk = io.imread(f)
		msk=cv2.cvtColor(msk,cv2.COLOR_RGBA2GRAY)
    msk[np.where(msk!=0)]=255
    io.imsave(new_file_path + '/' + i + '/' + str("%05d" % Index) + '.jpg' , msk)
     #处理命名可直接+'.jpg'让其以jepg形式存储
    Index += 1

這就是我解決資料夾處理問題的基本思路和流程,各個函數可以搭配使用,放入循環外或內部依具體要求有不同的效果。

以上是如何透過Python批次處理套娃式資料夾的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除