python按txt文件读取图像,复制并改名

本文介绍如何使用Python通过读取train.txt中的图像名称,从原始label文件夹中选择相应的图片,并在label2文件夹中复制并重命名为txt中列出的名称。涉及到了文件操作、字符串处理和图像I/O。
摘要由CSDN通过智能技术生成

利用python,按照txt文件读取指定目录下的特定图像(读取txt文件中出现名称的图像),进行复制并修改图像名称。

read()、readline()、readlines()三者差异:参考python中read() readline()以及readlines()区别 - 知乎

  1. read() 每次读取整个文件,它通常将读取到底文件内容放到一个字符串变量中,也就是说 .read() 生成文件内容是一个字符串类型。
  2. readline()每只读取文件的一行,通常也是读取到的一行内容放到一个字符串变量中,返回str类型。
  3. readlines()每次按行读取整个文件内容,将读取到的内容放到一个列表中,返回list类型。

txt文件中的图像名称 & 原目录文件下的图像名称:

train.txt: train_0.png, train_1.png, train_2.png, train_3.png, ……

label文件夹(原始):0.png, 1.png, 2.png, 3.png, 4.png, 5.png,……(很多很多)

label2文件夹(生成):train_0.png, train_1.png, train_2.png, train_3.png, ……(部分)

代码一: 

# -*- coding: UTF-8 -*- 
#!/usr/bin/env python
import re
from PIL import Image
import numpy as np
import os

data = []
path1=r'F:\all_date\WHU\train.txt'  # txt文件路径
path_img1=r'F:\all_date\WHU\label'  # 原图像文件路径
path_img2=r'F:\all_date\WHU\label2' # 保存图像新路径

with open(path1,'r') as fr:
	data = fr.readlines()
	data = ''.join(data).strip('\n').splitlines() 

# ''.join() list转为str  
# s.strip(rm) 删除s中开头结尾处的rm字符
# .splitlines() 将字符串返回列表

# print(data)

for name in data:
	name1=name.split('_')[1]
	path_old=os.path.join(path_img1,name1)
	path_new=os.path.join(path_img2,name)
	im=Image.open(path_old)
	im.save(path_new)
	im.close()

 

代码二:

import skimage.io as io
import os
 
data_dir='C:/Users/Administrator/Desktop/A'
str=data_dir + '/*.jpg'
coll = io.ImageCollection(str)
print(len(coll))
#io.imshow(coll[1])
#io.show()
file_list= []
for file in os.listdir(data_dir): #file为current_dir当前目录下图片名
    if file.endswith(".jpg"): #如果file以jpg结尾
        write_name = file #图片路径 + 图片名 + 标签
        file_list.append(write_name) #将write_name添加到file_list列表最后
        sorted(file_list) #将列表中所有元素随机排列
#print(file_list[1])
 
result=[]
with open('C:/Users/Administrator/Desktop/C/B.txt','r') as f:
    for line in f:
        line=line.strip('\n')
        result.append(line)
print(result)
 
for i in range(0,4):
    for j in range(0,2):
        print("i=",i)
        print("j=",j)
        print(file_list[i])
        print(result[j])
        if file_list[i]==result[j]:
            #print(j)
            print(result[j])
            #print(file_list[j])
            io.imsave("C:/Users/Administrator/Desktop/B/"+result[j],coll[i])

代码三:

# -*- coding: UTF-8 -*- 
#!/usr/bin/env python
import sys
import re
from PIL import Image
sys.path.append('E:\\test')
#f1 = open('E:\CODE\TX\dir.txt','r')
#f2 = open('E:\CODE\TX\dir.txt','w+')
#for line in f1.readlines():
#    if re.findall(' 1',line): #查找“空格1”的行 每行的格式000005 -1\n 000007
#       f2.write(line)#把查找到的行写入f2.
#f1.close()
#f2.close()
#data = []
import numpy as np
 
data = []
for line in open("E:/test/image.txt", "r"):  # 设置文件对象并读取每一行文件
    data.append(line)
#print(data)
#f3 = open('E:\CODE\TX\dir.txt','r')
for a in data:
#  print(a)
  #line3=line2[:-4] #读取每行去掉后四位的数#
  im = Image.open('E:/test/{}'.format(a[:-1]))#打开改路径下的line3记录的的文件名
  im.save('E:/test/1/{}'.format(a[:-1])) #把文件夹中指定的文件名称的图片另存到该路径下
  im.close()

参考Python代码:根据txt文件批量提取图片_算法之美-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值