【复制同名文件】使用Python复制多个文件夹的同名文件到一个文件夹

场景6 分类数据 每个文件夹对应对应类别,每个类别文件夹放了对应的图片

     

# 文件结构:

# images
#       0
#            xxxx1.bmp
#            xxxx2.bmp
#       1   
#            xxxxx5.bmp
#            xxxx8.bmp
#       、、、

# 输出标签文件 label.txt

# xxxx1.bmp 0
# xxxx2.bmp 0
# xxxxx5.bmp 1
# xxxx8.bmp 1
# 、、、



# -*- coding: utf-8 -*-

import cv2
import numpy as np
import os

def traversalDir_FirstDir(path):

    list = []
    if (os.path.exists(path)):
        files = os.listdir(path)
        for file in files:
            m = os.path.join(path,file)
            if (os.path.isdir(m)):
                h = os.path.split(m)
                list.append(h[1])
        return list



def label_classify(imgpath):
    labelsave = open("label_5class.txt","a+")
    pathDir = traversalDir_FirstDir(imgpath)
    for class_name in pathDir:
        curr_path = os.path.join(imgpath,class_name)
        for imagename in os.listdir(curr_path):
            print(imagename)
            print(class_name)
            labelsave.write(str(imagename)+" "+str(class_name)+"\n")
    labelsave.close()

if __name__ == '__main__':
    label_classify("./images")

 

 

场景1:爬虫得到的数据出现多个文件名相同,需要统一再次重命名。复制多个文件夹的同名文件到一个文件夹

#编码类型
#-*- coding: UTF-8 -*-
#导入包
import os 
import shutil

srcpath='./download_images/'
targetpath='./download_images_re/'

#累加,用于命名
i=1
#返回指定路径下的文件和目录信息
pathDir =  os.listdir(srcpath)

#遍历
for allDir in pathDir:


    for j in os.listdir(os.path.join(srcpath, allDir)):

        #路径拼接
        imgPath = os.path.join(srcpath,allDir,j)

        newtargetpath=targetpath+str(i).zfill(6)+'.jpeg'#zfill()向右对齐,用0补齐
        #复制文件
        shutil.copyfile(imgPath,newtargetpath)
        #打印被复制的文件
        print(imgPath)
        i+=1

场景2:用bash命令将多级目录下的文件打标签,生成列表文件

例如:

A-

    A1

            A1-1    1;2;3;4;5.jpg

            A1-2

    A2

    A3

B-

    B1

使用下列代码:

find ./ -name "*.*g"|awk -F '/' '{print $0"\t"$(NF-2)}' > own.txt

他最终会生成一个结果文档:左侧对应各个文件的绝对路径 右侧是你想打标签对应的名称(NF-2  指的是完整路径的倒数第二个文件夹名称 即A1)

A/A1/A1-1/1.jpg A1

A/A1/A1-1/2.jpg A1

A/A1/A1-1/3.jpg A1

.......

 

场景3:从excel文件或者txt文件中获取链接,进而下载

#3-1读取文件,文件形式是每行对应文件下载链接

import os
import urllib.request

file_addr = "./online_data.list"


# xlsx文件存在
if os.path.exists(file_addr):    # 读取内容
    data_file=open("online_data.list","r+").read().splitlines()
    save_path="online_data"
    if not os.path.exists(save_path):   #日期
        os.mkdir(save_path)
    for j in data_file:
        if j.endswith('.jpg') or j.endswith('.png'):
            print(j)
            # print('./'+save_path + j.split('/')[-1])
            try:
            	urllib.request.urlretrieve(j, './'+save_path +'/'+ j.split('/')[-1])  
            except:
                continue 


############################################################################

#3-2 读取excel 文件 。第21列为图片链接

import xlrd
import os
import urllib.request

file_addr = "./111111111.xls"


# xlsx文件存在
if os.path.exists(file_addr):    # 读取内容
    xls_file = xlrd.open_workbook(file_addr)    # 取第一个sheet页
    xls_sheet = xls_file.sheets()[0]    # 第一个sheet页的行数和列数
    nrows = int(xls_sheet.nrows)
    ncols = int(xls_sheet.ncols)    # 读取每一行,一般不读第一行,因为是表头    
    # for now in range(1,nows):        #拿到每行的数据,结构是列表,通过索引取每一个字段内容        
    

    rows_value = xls_sheet.col_values(21)    #第21列  图片链接
    # save_path=os.path.join(rows_value[3].split('/')[-1])   
    save_path="珍爱网"
    if not os.path.exists(save_path):   #日期
        os.mkdir(save_path)
    for j in rows_value:
        if j.endswith('.jpg') or j.endswith('.png'):
            print(j)
            # print('./'+save_path + j.split('/')[-1])
            urllib.request.urlretrieve(j, './'+save_path +'/'+ j.split('/')[-1])  

############################################################################

3-3 读取csv文件

import xlrd
import os
import urllib.request
import csv
import pandas as pd


file_addr = "./头像正样本.csv"


# csv文件存在
if os.path.exists(file_addr):    # 读取内容
    xls_file = pd.read_csv('头像误推.csv', usecols=['图片链接']).values.tolist() #使用图片链接这一列的数据
      
    save_path="正样本"
    if not os.path.exists(save_path):   #日期
        os.mkdir(save_path)
    for i,j in enumerate(xls_file):  #读取数据,遍历
        if j[0].endswith('.jpg') or j[0].endswith('.png') or j[0].endswith('=='):
            j=j[0].strip()   #删掉多余的 \t \n 
            print(j)
            # print('./'+save_path + j.split('/')[-1])
            urllib.request.urlretrieve(j, './'+save_path +'/'+ j.split('/')[-1])
        else:
            continue

 

 

场景4:使用opencv对人脸进行美白,同时保存md5名称的图像文件

代码参考:https://blog.csdn.net/hongchengling2/article/details/107574175

import numpy as np
import cv2
import os
import matplotlib.pyplot as plt

import hashlib   
m2 = hashlib.md5()   

def t2s(img):
    return cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
  
#Dest =(Src * (100 - Opacity) + (Src + 2 * GuassBlur(EPFFilter(Src) - Src + 128) - 256) * Opacity) /100 ;
def filter_gaussian(img, v1, v2):
    dst = np.zeros_like(img)
    dx = v1*5
    fc = v1*12.5
    p = 0.1

    #双边滤波
    temp1 = cv2.bilateralFilter(img,dx,fc,fc)
    #图像矩阵相减,得到人脸轮廓
    temp2 = cv2.subtract(temp1,img)
    temp2 = cv2.add(temp2,(10,10,10,128))
    #高斯模糊
    temp3 = cv2.GaussianBlur(temp2,(2*v2-1,2*v2-1),0)
    #原图叠加
    temp4 = cv2.add(img,temp3)
    #按权重混合
    dst1 = cv2.addWeighted(img,p,temp4,1-p,0.0)
    dst = cv2.add(dst1,(10,10,10,255))
    # plt.figure(figsize=(20,20))
    # plt.imshow(t2s(cv2.hconcat([img,dst])))
#     plt.imshow(t2s(cv2.hconcat([img,temp1,temp2,temp3,temp4,dst1,dst])))
    # plt.show()
    return dst

save_path="white_face"
if not os.path.exists(save_path):   #日期
    os.mkdir(save_path)

original_path ="originaldata_818"
for img in os.listdir(original_path):
    print(img)
    temppath=os.path.join(original_path,img)
    img = cv2.imread(temppath)
    m2.update(img)   
    dst = filter_gaussian(img,7,4)
    cv2.imwrite("./"+save_path+"/"+m2.hexdigest()+".jpg",dst)

场景5: 读取txt文档的多行两列数据,并转成numpy数组类型

#https://blog.csdn.net/qq_22885109/article/details/80858209   转载

数据实例:

775.483870967742 554.1935483870967
850.3225806451612 555.483870967742
936.1290322580645 558.7096774193549
929.6774193548387 677.4193548387096
925.1612903225806 798.0645161290322
841.2903225806451 803.2258064516129
761.9354838709677 797.4193548387096
770.3225806451612 672.258064516129
851.6129032258065 676.7741935483871






import re
import linecache
import numpy as np
import os
 
filename = '36.txt'

 
#数值文本文件直接转换为矩阵数组形式方法二
def txt_to_matrix(filename):
    file=open(filename)
    lines=file.readlines()
    #print lines
    #['0.94\t0.81\t...0.62\t\n', ... ,'0.92\t0.86\t...0.62\t\n']形式
    rows=len(lines)#文件行数
 
    datamat=np.zeros((rows,2))#初始化矩阵
 
    row=0
    for line in lines:
        line=line.strip().split(' ')#strip()默认移除字符串首尾空格或换行符
        datamat[row,:]=line[:]
        row+=1
 
    return datamat
 
 
#数值文本文件直接转换为矩阵数组形式方法三
def text_read(filename):
    # Try to read a txt file and return a matrix.Return [] if there was a mistake.
    try:
        file = open(filename,'r')
    except IOError:
        error = []
        return error
    content = file.readlines()
 
    rows=len(content)#文件行数
    datamat=np.zeros((rows,2))#初始化矩阵
    row_count=0
    
    for i in range(rows):
        content[i] = content[i].strip().split(' ')
        datamat[row_count,:] = content[i][:]
        row_count+=1
 
    file.close()
    return datamat
 
 
if __name__ == '__main__':
 


 
    data = txt_to_matrix(filename)
    print (data)
 
    out = text_read('36.txt')
    print (out)

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值