本文內容簡介
在日常的工作中,尤其是在企業的文件處理過程中,經過會出現同質文件數量多、文件內容隱藏在七八層的文件夾內,亦或是同一文件夾內的文件進行分類處理,等等任務,都對文件的自動化處理提出了更高的要求。解放雙手,提升效率,縮短時
目錄
2.複製指定文件夾內的文件,批操作(文件夾內文件名結構層次一致)
3.讀取某一文件夾內的文件名,並創建新的圖片,把名字複製給它
3.將一個文件夾內的文件,按照名字的不同,分批的保存到各自的文件夾內(歸類)
1.根據txt文件,搜索和複製指定文件
目的:是將如下txt文件內的png的文件名,找到所在別處文件的.xml文件,對應的將他複製保存到valid_xml文件夾內。如果txt內文件名存在,但是xml文件找不到,則跳過,繼續找到,進行復制和保存。
說明:
valid.txt 內文件名,反應了該文件所包含位置的信息;
待複製的圖片在TB_ct文件夾內,保存到輸入文件夾的valid_xml文件夾內
__author__ = "lingjun"
# E-mail: [email protected]
# 微信公衆號:小白CV
# -*- coding:utf8 -*-
import os
import shutil
def main(input_path):
with open("valid.txt", "r") as f:
for line in f.readlines():
line = line.strip('\n') # 去掉列表中每一個元素的換行符
xml_file_path=input_path+"\\"+line.split("_")[0]+"\label\\"+line.split(".")[0]+".xml"
print('%s' % line.split(".")[0])
print(xml_file_path)
if os.path.exists(xml_file_path):
shutil.copy(xml_file_path, os.path.join(input_path, 'valid_xml'))
if __name__=='__main__':
input_path = "F:\TB_ct"
main(input_path)
這裏就不做具體的展示了,步驟就是:逐行讀取valid.txt文件,提取每一行的內容--->然後轉化爲xml文件的名稱(因爲兩者對應文件只有文件類型後綴的不同)--->最後,前一個文件名copy到制定文件夾呢。
2.複製指定文件夾內的文件,批操作(文件夾內文件名結構層次一致)
適合文件夾結構相似的文件批操作
__author__ = "lingjun"
# E-mail: [email protected]
# 微信公衆號:小白CV
# -*- coding:utf8 -*-
import os
import shutil
############################################################
# _pneumonia 肺炎原始圖,複製指定文件夾
############################################################
def main_pneumonia(input_path,save_path):
for f_1 in os.listdir(input_path):
one_path=os.path.join(input_path, f_1)
#print(f_1)
for f_2 in os.listdir(one_path):
num_path = os.path.join(one_path, f_2)
#print(f_2)
for f_3 in os.listdir(num_path):
name_path = os.path.join(num_path, f_3)
#print(f_3)
if f_3 == "DCM":
for (path, dirs, files) in os.walk(name_path):
for filename in files:
all_target_file_path = os.path.join(name_path, filename)
print(all_target_file_path)
shutil.copy(all_target_file_path, os.path.join(save_path, "pneumonia_image"))
if __name__=='__main__':
input_path = "F:\image"
save_path = "F:/temp"
main_pneumonia(input_path, save_path)
這裏的內容和上節的內容存在相似之處,只是在獲取待處理文件名上面有所區別。該處的步驟是:逐層尋找制定名爲“DCM”文件夾--->遍歷文件夾內的文件,獲取每一個文件的完整文件path--->最後,前一個文件名copy到文件夾pneumonia_image內。
PS:上面進入文件的方式有點蠢,在你需要對文件夾名進行判斷的時候,就可以採用前面的方法。大多數情況下不需要逐層進入,可以直接採用如下的方式,直接拿到raw_path文件夾下所有枝葉的文件
for (path, dirs, files) in os.walk(raw_path):
for filename in files:
n+=1
print(filename)
3.讀取某一文件夾內的文件名,並創建新的圖片,把名字複製給它
- create_lable_image(),得到矩形框的左上角和右下角座標,繪製在新的空白圖片上;
- create_label_zero_image(),創建空白圖片。
__author__ = "lingjun"
# E-mail: [email protected]
# 微信公衆號:小白CV
# -*- coding:utf8 -*-
import os
import xml.etree.ElementTree as ET
import cv2
import numpy as np
############################################################
# 1 Create Segment Label Image,rectangle(x,y,x+w,y+h)
############################################################
def creat_label_image(xmin_list,ymin_list,xmax_list,ymax_list,width,height, filename):
img = np.zeros([width, height, 1], np.uint8)
for i in range(len(xmin_list)):
img[ymin_list[i]:ymax_list[i], xmin_list[i]:xmax_list[i],:] = 255
cv2.imwrite("./label_raw/" + filename.split('.')[0, 1]+'_label.png',img)
cv2.destroyAllWindows()
############################################################
# 2 Create Segment Label Image,空白圖
############################################################
def creat_label_zero_image(width, height, filename):
img = np.zeros([width, height, 1], np.uint8)
name1, name2, _=filename.split('.')
new_path = "F:/image_gen/label_raw/" + name1 + "_" + name2 + '.png'
print(new_path)
cv2.imwrite(new_path, img)
cv2.destroyAllWindows()
############################################################
# 3 Create Image on origin_image,rectangle(x,y,x+w,y+h)
############################################################
def draw_rectangle_test(xmin_list, ymin_list, xmax_list, ymax_list, filename, xml_file_path):
png_file_path_0=xml_file_path.split(".")[0]
png_file=png_file_path_0.split('\\')[-1]+".png"
png_path="F:/TB_ct/"+png_file_path_0.split('\\')[2]+"/LungWindow/"+png_file
print(png_path)
img = cv2.imread(png_path,cv2.IMREAD_UNCHANGED)
for i in range(len(xmin_list)):
cv2.rectangle(img, (xmin_list[i], ymin_list[i]), (xmax_list[i], ymax_list[i]), (0, 255, 0), 1)
#cv2.rectangle(img, (30, 160), (360, 260), (0, 0, 255), 4)
# cv2.namedWindow("AlanWang")
# cv2.imshow('AlanWang', img)
# cv2.waitKey(1000)
cv2.imwrite("./label_raw/" + filename.split('.')[0] + '_label.png', img)
cv2.destroyAllWindows()
def main_negative(input_path):
for (path, dirs, files) in os.walk(input_path):
for filename in files:
all_image_file_path = os.path.join(input_path, filename)
print(all_image_file_path)
# shutil.copy(all_image_file_path, os.path.join(input_path, 'all_class_image'))
creat_label_zero_image(512, 512, filename)
if __name__=='__main__':
input_path = r"F:\image_gen"
main_negative(input_path)
這裏的內容和前兩節的內容較爲不同,但都是對文件進行的操作。此處是獲取xml文件的名字和讀取到文件內矩形框座標(此處內容在第四節介紹)--->然後分別創建空白圖像--->在該空白圖像上繪製矩形框/空白圖/原圖上繪製矩形框--->把源文件名賦予新的圖片,形成一一對應關係。
3.將一個文件夾內的文件,按照名字的不同,分批的保存到各自的文件夾內(歸類)
整理前
def name_num():
raw_path = r"E:\\normal_19"
list_name = []
for (path, dirs, files) in os.walk(raw_path):
for filename in files:
new_Documentname = "normal" +filename.split("_")[0]
newpath=os.path.join(r"E:\nodule_lung\LIDC-IDRI\negative\normal", new_Documentname)
if os.path.exists(newpath) == False:
os.makedirs(newpath)
print(os.path.join(path, filename))
print(os.path.join(newpath, filename))
shutil.copy(os.path.join(path, filename), os.path.join(newpath, filename))
整理後
附錄
os.unlink(mark_pne_path) 實現對文件的刪除
shutil.move(file_path, os.path.join(save_path, 'TB_fp')) 實現將文件依次移動到TB_fp的文件夾內
shutil.copy(png_path, os.path.join(save_path, 'positive_raw')實現將文件依次複製到TB_fp的文件夾內
小白CV:公衆號旨在專注CV(計算機視覺)、AI(人工智能)領域相關技術,文章內容主要圍繞C++、Python編程技術,機器學習(ML)、深度學習(DL)、OpenCV等圖像處理技術,深度發掘技術要點,記錄學習工作中常用的操作,做你學習工作的問題小助手。只關注技術,做CV領域專業的知識分享平臺。
————————————————