深度学习数据处理—Python处理文件夹下相同和不同的图像数据(xml-jpg互找)

个人微信公众号: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)

微信公众号:AI研习图书馆,欢迎关注~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI研习图书馆

您的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值