批量转换文件名称-字符串去除不想要字符

函数 1 endswith('.jpg')    abspath()   re.sub() 
  os.rename(src, dst)文件重命名
strinfo = re.compile(' ')
result = strinfo.sub('', result)
1.。。。。。。。。。。。。。
import os
import re

class BatchRename():
    '''
    批量重命名文件夹中的图片文件

    '''
    def __init__(self):
        self.path = 'img1'  #表示需要命名处理的文件夹

    def rename(self):
        filelist = os.listdir(self.path) #获取文件路径
        total_num = len(filelist) #获取文件长度(个数)
        i = 1  #表示文件的命名是从1开始的
        for item in filelist:
            if item.endswith('.jpg'):  #初始的图片的格式为jpg格式的(或者源文件是png格式及其他格式,后面的转换格式就可以调整为自己需要的格式即可)
                src = os.path.join(os.path.abspath(self.path), item)
                item = re.sub(u"\\(.*?\\)", "", item)
                print('....',item)
                dst = os.path.join(os.path.abspath(self.path), item)#处理后的格式也为jpg格式的,当然这里可以改成png格式
                #dst = os.path.join(os.path.abspath(self.path), '0000' + format(str(i), '0>3s') + '.jpg')    这种情况下的命名格式为0000000.jpg形式,可以自主定义想要的格式
                try:
                    os.rename(src, dst)
                    print ('converting %s to %s ...' % (src, dst))
                    i = i + 1
                except:
                    continue
        print ('total %d to rename & converted %d jpgs' % (total_num, i))

if __name__ == '__main__':
    demo = BatchRename()
    demo.rename()

2.。。。。。。。。。。。。。。删除字符串中元素 重命名

def rename2(self):
    for file in os.listdir(path):
        # result = re.sub(u"\\(.*?\\)", "", file)
        result = re.sub(u"\\(", "", file)
        result = re.sub(u"\\)", "", result)
        strinfo = re.compile(' ')
        result = strinfo.sub('', result)
        src = os.path.join(os.path.abspath(path), file)
        dst = os.path.join(os.path.abspath(path), result)
        # os.chdir(path)
        os.rename(src, dst)

3. 读取图片路径写入txt

import os
from glob import glob
#paths=['coco2014','Stanford','vehicleplate']
paths=['H:\服务器传递文件\img2']
f=open('val_all22.txt', 'w')
dir = 'data/img/'
for path in paths:
    p=os.path.abspath(path)  #'/JPEGImages'+'/*.jpg'
    #p = glob(path + "/*.jpg")
    filenames=os.listdir(p)
    #print('...',filenames)
    for filename in filenames:
        if filename.endswith('.jpg'):
            im_path = p + '/' + filename
            print(im_path)
            f.write(dir + filename + '\n')

f.close()

4...........数据分为验证集 训练集
import os, random, shutil


def moveFile(fileDir):
    pathDir = os.listdir(fileDir)  # 取图片的原始路径
    empty = []
    for file in pathDir:
        if file.endswith('jpg'):
            empty.append(file)

    #filenumber = len(pathDir)
    filenumber = len(empty)
    rate = 0.2  # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
    picknumber = int(filenumber * rate)  # 按照rate比例从文件夹中取一定数量图片
    #sample = random.sample(pathDir, picknumber)  # 随机选取picknumber数量的样本图片
    sample = random.sample(empty, picknumber)  # 随机选取picknumber数量的样本图片

    print(sample)
    for name in sample:

        shutil.move(fileDir + name, tarDir + name)
    return


if __name__ == '__main__':
    fileDir = "H://服务器传递文件//img//"  # 源图片文件夹路径
    tarDir = 'H://服务器传递文件//img2//'  # 移动到新的文件夹路径
    moveFile(fileDir)

5.拷贝指定文件到另一个文件夹

import os
import json
import shutil
import re

#读取下载的文件
f_list = os.listdir('下载的文件地址路径')

#将类目ID同分类映射的JSON文件读进来
with open('JSON文件地址路径', encoding='utf-8') as f:
    rules = json.loads(f.read())
    f.close()

#开始来拷贝文件了
for file in f_list:
    #由于文件夹中有txt文件和jpeg两种格式,需要进行处理,读取txt格式文件
    if os.path.splitext(file)[1]  == '.txt':
        imgID =file.replace('.txt','')
        f=open('下载的文件地址路径'+'/'+file,'r+').readlines()
        file_name,cateID=f[0].split(',')
        #小细节处理,因为上一步对文件处理提取cateID是,得到的格式是‘  1’而不是‘1’,故需要处理一下用re库的replace删除
        fold_name=rules[cateID.replace(' ','')]
        #另一处小细节处理,看上图可以看到数据中的命名为'可回收垃圾/旧衣服',这样在Python路径中作为文件名会导致多一层文件,故改成了’可回收垃圾_旧衣服‘
        fold_name=fold_name.replace('/','_')
        #设置最后要拷贝的文件名称
        determination = '文件夹路径名'+fold_name+'/'
        #判断文件夹是否存在
        if not os.path.exists(determination):
            os.makedirs(determination)
        #从一个文件中往另外一个文件夹移动文件
        shutil.copyfile('下载的文件地址路'+file_name, determination+file_name)
        
print('Done')

6. 如果字符串是 >id1234567 但是我只需要id部分不想要‘>'怎么办?

1. 字符串解决方法

id = '>1234567'
print id
id1 = id.strip('>')
print id1

2.正则表达式解决法

import re
id = '>1234567'
print id
id1 = re.sub('>','',id)
#re.sub(想要替换的部分,替换为什么,处理哪个字符串)
print id1

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值