# 一般,使用 class 语句来创建一个新类,class之后为类的名称(通常首字母大写)并以冒号结尾,例如:
# 类中可以定义所使用的方法,类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self;
# init()方法是一种特殊的方法,被称为类的初始化方法,当创建这个类的实例时就会调用该方法;
# self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数;
# 类的定义
class Ticket():
def __init__(self,checi,fstation,tstation,fdate,ftime,ttime):
self.checi=checi
self.fstation=fstation
self.tstation=tstation
self.fdate=fdate
self.ftime=ftime
self.ttime=ttime
def printinfo(self):
print("车次:",self.checi)
print("出发站:", self.fstation)
print("到达站:", self.tstation)
print("出发时间:", self.fdate)
#类的对象的创建:
#创建a1对象
a1=Ticket("G2020","shenyang","shandong",'2020-03-31','15:00','18:00')
#创建a2对象
a2=Ticket("T2019","wuhan","chongqing",'2020-03-30','13:00','19:00')
#最后是对象属性的访问:
a1.printinfo()
a2.printinfo()
![](https://img2020.cnblogs.com/blog/843408/202003/843408-20200331154901663-948707855.png)
# eg9-train-val-txt.py
# _*_ coding:utf8 _*_
###################################################################
## 定义一个类,这个类将用于批量处理图像,包括若干功能:
## (1)统一图像的格式为jpg。
## (2)将多个图片文件夹构造成一个用于图像分类的数据集,产生txt文件,每一行的格式为:图片路径 标签
## (3)txt文件按照7:3的比例分为训练集和测试集,并随机打乱顺序
###################################################################
import os
import sys
import shutil
import cv2
import random
# 类的定义
class GeneDataset():
def __init__(self, rootdir):
self.rootdir = rootdir
self.subdirs = []
self.subdirimages = []
self.numclasses = 0
self.lines = []
def looksubdir(self):
list_dirs = os.walk(self.rootdir)
for root, dirs, files in list_dirs:
for d in dirs:
self.subdirs.append(os.path.join(root,d))
print( "subdir=",os.path.join(root,d) ) #print "subdir=",os.path.join(root,d)
self.numclasses = self.numclasses + 1
def reformat(self):
label = 0
for subdir in self.subdirs:
list_dirs = os.walk(subdir)
for root, dirs, files in list_dirs:
for f in files:
srcname = os.path.join(root,f)
print( "srcname",srcname ) #print "srcname",srcname
srcformat = srcname.split('.')[-1]
if srcformat is not ".jpg":
img = cv2.imread(srcname)
newname = srcname.replace(srcformat,'jpg')
print( "newname=",newname ) #print "newname=",newname
cv2.imwrite(newname,img)
self.lines.append(newname+' '+str(label)+'
')
os.remove(srcname)
label = label + 1
def split_train_val(self,trainfile,testfile):
if len(self.lines):
random.shuffle(self.lines)
ftrainfile = open(trainfile,'w')
ftestfile = open(testfile,'w')
trainlength = int(0.7*len(self.lines))
for i in range(0,trainlength):
ftrainfile.write(self.lines[i])
for i in range(trainlength,len(self.lines)):
ftestfile.write(self.lines[i])
# 类的创建和使用
#myclassdataset = GeneDataset(sys.argv[1])
myclassdataset = GeneDataset("/home/u/wp_data/learn-sh/新图像/")
myclassdataset.looksubdir()
myclassdataset.reformat()
myclassdataset.split_train_val('train.txt','test.txt')
![](https://img2020.cnblogs.com/blog/843408/202003/843408-20200331155228300-1648256508.png)
# train.txt
/home/u/wp_data/learn-sh/新图像/2/20001.jpg 0
/home/u/wp_data/learn-sh/新图像/3/50006.jpg 1
/home/u/wp_data/learn-sh/新图像/2/20003.jpg 0
/home/u/wp_data/learn-sh/新图像/3/50004.jpg 1
/home/u/wp_data/learn-sh/新图像/3/50007.jpg 1
/home/u/wp_data/learn-sh/新图像/2/20004.jpg 0
/home/u/wp_data/learn-sh/新图像/3/50005.jpg 1
/home/u/wp_data/learn-sh/新图像/1/10005.jpg 2
/home/u/wp_data/learn-sh/新图像/2/20002.jpg 0
/home/u/wp_data/learn-sh/新图像/1/10001.jpg 2
/home/u/wp_data/learn-sh/新图像/3/50001.jpg 1
# test.txt
/home/u/wp_data/learn-sh/新图像/1/10002.jpg 2
/home/u/wp_data/learn-sh/新图像/3/50003.jpg 1
/home/u/wp_data/learn-sh/新图像/1/10003.jpg 2
/home/u/wp_data/learn-sh/新图像/3/50002.jpg 1
/home/u/wp_data/learn-sh/新图像/1/10004.jpg 2
/home/u/wp_data/learn-sh/新图像/2/20005.jpg 0