def readfile(path, label): # label 是一个 boolean variable, 代表需不需要回传 y 值 image_dir = sorted(os.listdir(path)) # os.listdir(path)将path路径下的文件名以列表形式读出 # print(os.listdir(path)) # print(image_dir) x = np.zeros((len(image_dir), 128, 128, 3), dtype=np.uint8) y = np.zeros((len(image_dir)), dtype=np.uint8) for i, file in enumerate(image_dir): img = cv2.imread(os.path.join(path, file)) # os.path.join(path, file) 路径名合并 x[i, :, :] = cv2.resize(img, (128, 128)) if label: y[i] = int(file.split("_")[0]) if label: return x, y else: return x
时间: 2024-03-30 10:33:38 浏览: 14
这段代码是用来读取一个文件夹中的图片,并将其转换成 numpy 数组的格式。函数的输入参数包括文件夹路径和一个布尔类型的标签 label,用来表示是否需要返回 y 值。函数首先通过 os.listdir(path) 函数获取路径下所有文件名,并对其进行排序。然后,创建一个大小为 (len(image_dir), 128, 128, 3) 的 0 数组 x,用来存放图片数据。如果 label 为真,则创建一个大小为 (len(image_dir),) 的 0 数组 y,用来存放图片对应的标签。接下来,使用 cv2.imread 函数读取图片,并使用 cv2.resize 函数将其转换为 128x128 的大小,存入数组 x 中。如果 label 为真,则从文件名中提取标签信息,存入数组 y 中。最后,根据 label 的取值,返回 x 或者 (x, y)。
相关问题
class SequenceTSet(): def __init__(self): self.Root=Student() def readFile(self, filname): #补充代码,能将文件中的信息,读入到self.Tset中 def writeFile(self, filname): #补充代码,能将self.Tset信息,写入到文件filname中 def sortAndprint(self,filename): #补充代码,对TSet中的学生的身高进行升序排序,注意排序,可通过 在有序链表中的就地添加后续节点 来完成 。 def cntHeight(self, y): #补充代码,输出TSet中身高大于y的学生个数 def splitSet(self, x,filename): #补充代码,能将TSet中性别为x的学生都删除 def del(self, sid): #补充代码,删除TSet中学号为sid的学生 def insert(self, hei): #补充代码,添加身高为hei的学生到TSet中,要求添加学生后,学生表中的身高保持有升序。
补充代码如下:
```
class SequenceTSet():
def __init__(self):
self.Root = Student()
def readFile(self, filename):
with open(filename, 'r') as f:
lines = f.readlines()
for line in lines:
sid, name, height, sex = line.strip().split()
self.insert(int(height))
def writeFile(self, filename):
with open(filename, 'w') as f:
cur = self.Root.next
while cur:
f.write("{} {} {} {}\n".format(cur.sid, cur.name, cur.height, cur.sex))
cur = cur.next
def sortAndprint(self, filename):
cur = self.Root.next
newRoot = Student()
while cur:
prev = newRoot
nxt = prev.next
while nxt:
if nxt.height > cur.height:
break
prev = nxt
nxt = nxt.next
temp = cur.next
cur.next = nxt
prev.next = cur
cur = temp
self.Root = newRoot
self.writeFile(filename)
def cntHeight(self, y):
cnt = 0
cur = self.Root.next
while cur:
if cur.height > y:
cnt += 1
cur = cur.next
return cnt
def splitSet(self, x, filename):
newRoot = Student()
cur = self.Root.next
while cur:
if cur.sex == x:
temp = cur.next
cur.next = None
newRoot.next = cur
cur = temp
else:
prev = cur
cur = cur.next
self.Root = prev
self.writeFile(filename)
def del(self, sid):
cur = self.Root.next
prev = self.Root
while cur:
if cur.sid == sid:
prev.next = cur.next
cur.next = None
return
prev = cur
cur = cur.next
def insert(self, hei):
cur = self.Root.next
prev = self.Root
while cur:
if cur.height > hei:
break
prev = cur
cur = cur.next
newStudent = Student()
newStudent.height = hei
newStudent.next = cur
prev.next = newStudent
```
解释:
1. `readFile` 方法:从文件中读取学生信息,并逐个插入到 `TSet` 中。
2. `writeFile` 方法:将 `TSet` 中的学生信息写入到文件中。
3. `sortAndprint` 方法:对 `TSet` 中的学生身高进行升序排序,并写入到指定文件中。在这里,我们采用了链表的插入排序算法。
4. `cntHeight` 方法:统计 `TSet` 中身高大于 `y` 的学生个数。
5. `splitSet` 方法:将性别为 `x` 的学生从 `TSet` 中删除,并写入到指定文件中。
6. `del` 方法:删除学号为 `sid` 的学生。
7. `insert` 方法:向 `TSet` 中插入身高为 `hei` 的学生,要求插入后仍然保持身高升序。
python代码:定义一个学生类和学生类对象的链表类,完成以下函数的补充。 2.1 补充学生类的定义 class Student: def __init__(self, sid=None,name=None,height=None,sex=None): self.sid=sid self.name=name self.height=height self.sex=sex def print(): #补充代码,打印本同学的全部信息 2.2 补充学生链表的定义 class SequenceTSet(): def __init__(self): self.Root=Student() def readFile(self, filname): #补充代码,能将文件中的信息,读入到self.Tset中 def writeFile(self, filname): #补充代码,能将self.Tset信息,写入到文件filname中 def sortAndprint(self,filename): #补充代码,对TSet中的学生的身高进行升序排序,注意排序,可通过 在有序链表中的就地添加后续节点 来完成 。 def cntHeight(self, y): #补充代码,输出TSet中身高大于y的学生个数 def splitSet(self, x,filename): #补充代码,能将TSet中性别为x的学生都删除 def del(self, sid): #补充代码,删除TSet中学号为sid的学生 def insert(self, hei): #补充代码,添加身高为hei的学生到TSet中,要求添加学生后,学生表中的身高保持有升序。 建立如下的 学生信息文件 ,每行存入 学号、姓名、 性别、 身高等信息 ,存为student.txt文件 ,读此文件 ,调用 学生类中的所有函数,进行数据 维护后,重新存回到文件 student.txt中 。 1 杨勇 0 1.78 2 左千 1 1.64
2.1 补充学生类的定义
```
class Student:
def __init__(self, sid=None, name=None, height=None, sex=None):
self.sid = sid
self.name = name
self.height = height
self.sex = sex
def print(self):
print("学号:", self.sid)
print("姓名:", self.name)
print("身高:", self.height)
print("性别:", "男" if self.sex == 0 else "女")
```
2.2 补充学生链表的定义
```
class SequenceTSet:
def __init__(self):
self.root = None
def readFile(self, filename):
f = open(filename, 'r')
for line in f:
sid, name, sex, height = line.strip().split()
s = Student(sid, name, float(height), int(sex))
self.insert(s)
f.close()
def writeFile(self, filename):
f = open(filename, 'w')
p = self.root
while p:
f.write("{}\t{}\t{}\t{}\n".format(p.sid, p.name, p.sex, p.height))
p = p.next
f.close()
def sortAndprint(self, filename):
p = self.root
while p:
q = p.next
while q:
if p.height > q.height:
p.height, q.height = q.height, p.height
q = q.next
p = p.next
self.writeFile(filename)
def cntHeight(self, y):
cnt = 0
p = self.root
while p:
if p.height > y:
cnt += 1
p = p.next
print("身高大于{}的学生个数为{}".format(y, cnt))
def splitSet(self, x, filename):
p = self.root
pre = None
while p:
if p.sex == x:
if pre:
pre.next = p.next
else:
self.root = p.next
else:
pre = p
p = p.next
self.writeFile(filename)
def delStu(self, sid):
p = self.root
pre = None
while p:
if p.sid == sid:
if pre:
pre.next = p.next
else:
self.root = p.next
return
pre = p
p = p.next
def insert(self, s):
p = self.root
pre = None
while p:
if p.height > s.height:
break
pre = p
p = p.next
if pre:
s.next = pre.next
pre.next = s
else:
s.next = self.root
self.root = s
```
完整的代码如下:
```
class Student:
def __init__(self, sid=None, name=None, height=None, sex=None):
self.sid = sid
self.name = name
self.height = height
self.sex = sex
def print(self):
print("学号:", self.sid)
print("姓名:", self.name)
print("身高:", self.height)
print("性别:", "男" if self.sex == 0 else "女")
class SequenceTSet:
def __init__(self):
self.root = None
def readFile(self, filename):
f = open(filename, 'r')
for line in f:
sid, name, sex, height = line.strip().split()
s = Student(sid, name, float(height), int(sex))
self.insert(s)
f.close()
def writeFile(self, filename):
f = open(filename, 'w')
p = self.root
while p:
f.write("{}\t{}\t{}\t{}\n".format(p.sid, p.name, p.sex, p.height))
p = p.next
f.close()
def sortAndprint(self, filename):
p = self.root
while p:
q = p.next
while q:
if p.height > q.height:
p.height, q.height = q.height, p.height
q = q.next
p = p.next
self.writeFile(filename)
def cntHeight(self, y):
cnt = 0
p = self.root
while p:
if p.height > y:
cnt += 1
p = p.next
print("身高大于{}的学生个数为{}".format(y, cnt))
def splitSet(self, x, filename):
p = self.root
pre = None
while p:
if p.sex == x:
if pre:
pre.next = p.next
else:
self.root = p.next
else:
pre = p
p = p.next
self.writeFile(filename)
def delStu(self, sid):
p = self.root
pre = None
while p:
if p.sid == sid:
if pre:
pre.next = p.next
else:
self.root = p.next
return
pre = p
p = p.next
def insert(self, s):
p = self.root
pre = None
while p:
if p.height > s.height:
break
pre = p
p = p.next
if pre:
s.next = pre.next
pre.next = s
else:
s.next = self.root
self.root = s
if __name__ == "__main__":
st = SequenceTSet()
st.readFile("student.txt")
st.sortAndprint("student.txt")
st.cntHeight(1.7)
st.splitSet(0, "student.txt")
st.delStu(2)
st.insert(Student(3, "王五", 1.65, 0))
st.writeFile("student.txt")
```
注意,这里的 `student.txt` 文件,需要和代码在同一个目录下,并且文件内容需要和题目中给出的一致。