個人微信公衆號:AI研習圖書館,歡迎關注~
深度學習知識及資源分享,學習交流,共同進步~
1. 找出兩個文件夾裏相同的文件,保存輸出
# !/usr/bin/env python
# encoding: utf-8
import os
import glob
from PIL import Image
#指定找到文件後,另存爲的文件夾路徑
outDir = os.path.abspath('/home/chenxp/datadisk/pascal/VOCdevkit/VOC2010/output')
#指定第一個文件夾的位置
imageDir1 = os.path.abspath('/home/chenxp/datadisk/pascal/VOCdevkit/VOC2010/JPEGImages')
#定義要處理的第一個文件夾變量
image1 = [] #image1指文件夾裏的文件,包括文件後綴格式;
imgname1 = [] #imgname1指裏面的文件名稱,不包括文件後綴格式
#通過glob.glob來獲取第一個文件夾下,所有'.jpg'文件
imageList1 = glob.glob(os.path.join(imageDir1, '*.jpg'))
#遍歷所有文件,獲取文件名稱(包括後綴)
for item in imageList1:
image1.append(os.path.basename(item))
#遍歷文件名稱,去除後綴,只保留名稱
for item in image1:
(temp1, temp2) = os.path.splitext(item)
imgname1.append(temp1)
#對於第二個文件夾路徑,做同樣的操作
imageDir2 = os.path.abspath('/home/chenxp/datadisk/pascal/VOCdevkit/VOC2010/SegmentationClass')
image2 = []
imgname2 = []
imageList2 = glob.glob(os.path.join(imageDir2, '*.png'))
for item in imageList2:
image2.append(os.path.basename(item))
for item in image2:
(temp1, temp2) = os.path.splitext(item)
imgname2.append(temp1)
#通過遍歷,獲取第一個文件夾下,文件名稱(不包括後綴)與第二個文件夾相同的文件,並另存在outDir文件夾下。文件名稱與第一個文件夾裏的文件相同,後綴格式亦保持不變。
for item1 in imgname1:
for item2 in imgname2:
if item1 == item2:
dir = imageList1[imgname1.index(item1)]
img = Image.open(dir)
name = os.path.basename(dir)
img.save(os.path.join(outDir, name))
Conclusion
python的os.path、glob模塊操作:
#os.path.abspath('path'),返回絕對路徑
imageDir1 = os.path.abspath('/home/chenxp/datadisk/pascal/VOCdevkit/VOC2010/JPEGImages')
#glob.glob('path'),獲取該路徑下所有指定格式的文件
imageList1 = glob.glob(os.path.join(imageDir1, '*.jpg'))
#os.path.basename('path')返回文件名稱,包括文件後綴格式
for item in imageList1:
image1.append(os.path.basename(item))
#os.path.splitext(),返回元組,爲文件名稱與文件後綴格式
for item in image1:
(temp1, temp2) = os.path.splitext(item)
imgname1.append(temp1)
2. 找出兩個文件夾下,文件名稱與文件格式相同的程序
#!/usr/bin/env python
# encoding: utf-8
import glob
import os
import numpy as np
from PIL import Image
outDir = os.path.abspath('/home/chenxp/datadisk/pascal/VOCdevkit/VOC2010/output')
#Use the function: os.path.join
imageDir1 = os.path.abspath('/home/chenxp/datadisk/pascal/VOCdevkit/VOC2010/JPEGImages')
#Define the List of the images
image1 = []
#Get the absolute path of the images
imageList1 = glob.glob(os.path.join(imageDir1, '*.png'))
#Use the function: os.path.basename() Get the name of the images
for item in imageList1:
image1.append(os.path.basename(item))
imageDir2 = os.path.abspath('/home/chenxp/datadisk/pascal/VOCdevkit/VOC2010/SegmentationClass')
image2 = []
imageList2 = glob.glob(os.path.join(imageDir2, '*.png'))
for item in imageList2:
image2.append(os.path.basename(item))
for item in image1:
print item
for item in image2:
print item
for item1 in image1:
for item2 in image2:
if item1 == item2:
img = Image.open(os.path.join(imageDir2, item1))
img.save(os.path.join(outDir, item2))
3. 獲取兩個文件夾中重複數據
#-*- coding: UTF-8 -*-
import re
import sys
import os
str1=[]
str2=[]
str_dump=[]
fa=open("A.txt",'r')
fb=open("B.txt",'r')
fc=open("C.txt",'w+')
#將A.txt的內容逐行讀到str1中
for line in fa.readlines():
str1.append(line.replace("\n",'')) #line.replace("\n",'') 去掉換行符\n
#將B.txt中的內容逐行讀到str2中
for line in fb.readlines():
str2.append(line.replace("\n",''))
#將兩個文件中重複的行,添加到str_dump中
for i in str1:
if i in str2:
str_dump.append(i)
#將兩個文件的行合併,並去重
str_all=set(str1+str2)
#將重複的行,在去重的合併行中,remove掉,剩下的就是不重複的行了
for i in str_dump:
if i in str_all:
str_all.remove(i)
#寫行文件中
for i in list(str_all):
fc.write(i+'\n')
fa.close()
fb.close()
fc.close()
4. 根據xml文件找到對應的圖片文件
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
import cv2
input_pic_path = "./Drone_make_picture"
input_xml_path = "./Drone_transform_xml"
out_pic = "./pic_out/"
list_pic = os.listdir(input_pic_path)
for xml_file_name in os.listdir(input_xml_path):
pic_file_name = os.path.splitext(xml_file_name)[0] + ".JPG"
pic_file_path = os.path.join(input_pic_path,pic_file_name)
image = cv2.imread(pic_file_path)
#cv2.imwrite(out_pic + pic_file_name, image)
shutil.copy(out_pic + pic_file_name, image)
5. 從xml文件和jpg的混合文件夾中獲取xml對應的jpg文件
import json
import shutil,os
path = 'D:/pythonpy/' //xml和jpg混合文件所在的位置
filelist = os.listdir(path)
picturelist=[] //存放圖片
for file in filelist:
if( ".xml" in file ): //找到xml文件
picture1 = file.split(".",1) //用“.”來分割文件名
picture=picture1[0] //得到文件名
picturelist.append(picture)
else:
continue
for picture in picturelist:
shutil.copy("D:/pythonpy/"+picture, "D:/pythonpy/pic") //將path下的xml對應的jpg文件存入另一文件夾中
6.挑選文件夾下圖片的對應xml文件
#coding=utf-8
import os
#import os.path
import shutil #Python文件複製相應模塊
label_dir=r'/home/.../Annotations' #所有xml文件所在文件夾
annotion_dir='/home/.../picturexml' #粘貼對應圖片名稱的xml文件到指定文件夾
path = '/home/.../picture' #圖片文件夾
path_list = os.listdir(path)# os.listdir(file)會歷遍文件夾內的文件並返回一個列表
#print(path_list)
path_name=[] # 定義一個空列表,不需要path_list中的後綴名
# 利用循環歷遍path_list列表並且利用split去掉後綴名
for i in path_list:
path_name.append(i.split(".")[0])
#print(path_name)
# 排序一下
path_name.sort()
for file_name in path_name:
# "a"表示以不覆蓋的形式寫入到文件中,當前文件夾如果沒有"save.txt"會自動創建
with open("save.txt","a") as f:
f.write(file_name + "\n")
#print(file_name)
f.close()
f = open("save.txt","r") #設置文件對象
lines= f.readlines()
#print (lines)
s=[]
for line in lines:
line = line.strip()
print (line)
tempxmlname='%s.xml'%line
print(tempxmlname)
xmlname=os.path.join(label_dir,tempxmlname)
print (xmlname)
os.listdir(label_dir)
shutil.copy(xmlname,annotion_dir)