函数 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