Home  >  Article  >  Backend Development  >  How to batch process matryoshka-style folders via Python

How to batch process matryoshka-style folders via Python

coldplay.xixi
coldplay.xixiforward
2020-08-24 17:14:482342browse

How to batch process matryoshka-style folders via Python

【Related learning recommendations: python tutorial

Preface

When I was preprocessing some training images of the project team, I found that the processed images were divided into categories and stored in nesting doll style in folders within folders, so I batch processed them and processed them according to the original When folder rules are stored, it will cause a lot of trouble
But through the combination of the following functions, it helped me successfully complete a series of preprocessing.

1. Use the Zhishan library that you won’t get tired of

##1. Install the library

pip Installation:

pip install zisan

2.getFiles function

Function call:

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

Pictures are stored in: Folder 2016 -> Folder Annotations -> ;Subfolder-> 00000.png

Through the getFiles function, you can call out all the picture paths in all folders in Annotations

In other words, the getFiles function will Call out all file paths, regardless of whether there are subfolders in the middle

2. Other functions

1.os.listdir function

After this function is called, it will return the name of the folder under the path, which is stored in the list in the form of a string

The code is as follows:

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

Effect:



2.os.mkdir function

Code:

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

Used to create new folders

3. Application

Requirements: Process each sub-file in the Annotations folder folder, and store them in the corresponding location in the new file folder according to the original rules. The naming rules are such as 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

. This is my basic idea and process for solving the problem of folder processing. Each function It can be used in combination and placed outside or inside the loop to have different effects according to specific requirements.

The above is the detailed content of How to batch process matryoshka-style folders via Python. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:jb51.net. If there is any infringement, please contact admin@php.cn delete