批量查看npz文件标签内容

文章讲述了作者在处理npz文件时遇到标签类型错误,通过查看文件内容、提取唯一标签值和统计出现次数来定位问题,发现额外的标签值。
摘要由CSDN通过智能技术生成

在运行代码时,报错了,说我文件的标签类型有问题。(在最近我确实修改过)

下面是我需要解决的问题和代码:

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,这也是我需要解决的地方。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值