在运行代码时,报错了,说我文件的标签类型有问题。(在最近我确实修改过)
下面是我需要解决的问题和代码:
1、首先查看我的npz文件里面有什么
import os
import numpy as np
# 指定文件目录
directory = '/path/to/your/directory/'
# 获取目录下所有文件
files = os.listdir(directory)
# 遍历文件
for file in files:
if file.endswith('.npz'):
# 加载npz文件
data = np.load(os.path.join(directory, file))
# 获取npz文件中的label
label = data['label']
print(f'File: {file}, Label: {label}')
得到结果:image label
2、然后查看label里面的内容(这边踩坑了,里面都是数组,我很难看出来,下面是一步步试错后的代码)
import os
import numpy as np
# 指定文件夹路径
folder_path = ''
# 打开txt文件,准备写入数据
with open('values.txt', 'w') as f:
# 获取文件夹中所有的NPZ文件
npz_files = [file for file in os.listdir(folder_path) if file.endswith('.npz')]
# 遍历每个NPZ文件
for npz_file in npz_files:
# 加载NPZ文件
data = np.load(os.path.join(folder_path, npz_file))
# 获取label数组
label_array = data['label']
# 获取数组中所有不重复的值
unique_values = np.unique(label_array)
# 写入文件名和不重复值到txt文件
f.write(f"文件: {npz_file}\n")
f.write("Label数组中出现的值:\n")
for value in unique_values:
f.write(f"{value}\n")
f.write('\n') # 写入空行,用于区分不同文件的结果
这边将结果存到了txt文件里面,大致是这样的
文件: 0.npz
Label数组中出现的值:
0
2
38
文件: 1.npz
Label数组中出现的值:
0
2
文件: 10.npz
Label数组中出现的值:
0
2
38
文件: 100.npz
Label数组中出现的值:
0
2
文件: 101.npz
Label数组中出现的值:
0
38
文件: 102.npz
Label数组中出现的值:
0
2
5
3、紧接着,我需要统计里面的标签值有哪些
# 用于存储值和对应出现次数的字典
value_counts = {}
# 读取原始的values.txt文件,准备处理数据
with open('values.txt', 'r') as f:
lines = f.readlines() # 读取文件所有行内容
current_file = None # 当前处理的文件名
# 遍历每一行
for line in lines:
line = line.strip()
if line.startswith("文件:"): # 如果是文件名标识行
current_file = line.split(": ")[1].strip() # 提取文件名
elif line.isdigit() and current_file: # 如果当前行包含数字且当前有文件名
# 提取值并加入字典中
value = int(line)
# 将值作为字典的键,累加出现次数
value_counts[value] = value_counts.get(value, 0) + 1
# 将统计结果写入新的result.txt文件
with open('result.txt', 'w') as result_file:
result_file.write("所有文件中值出现的总次数:\n")
for value, count in value_counts.items():
result_file.write(f"值 {value}: 出现总次数 {count}\n")
同样存到了txt文件里面
所有文件中值出现的总次数:
值 0: 出现总次数 406
值 2: 出现总次数 287
值 38: 出现总次数 146
值 5: 出现总次数 59
值 4: 出现总次数 89
值 113: 出现总次数 35
值 1: 出现总次数 1
值 3: 出现总次数 1
我的标签为0-5,但是多出了38和113,这也是我需要解决的地方。