在Python中提取多个图像文件名中的详细信息,并将其添加为数据集的标签

在Python中提取多个图像文件名中的详细信息,并将其添加为数据集的标签,python,extract,filenames,Python,Extract,Filenames,我有一个包含1300个.JPEG文件的文件夹,所有文件都有特定顺序的文件名 每个文件名的顺序为category\u count\u randomString.JPEG。举个例子,下面是文件夹中的一个图像: 13_2_5jdf.JPEG其中13是类别,2是图像中该类别的计数,后跟随机字符串 我希望能够: 从每个文件名中提取类别并将其指定为标签(然后构建CNN模型),然后 从每个文件名中提取类别的计数,并将其分配给向量/数组 现在,我刚刚使用glob函数加载了图像(还没有作为数组) import g

我有一个包含1300个.JPEG文件的文件夹,所有文件都有特定顺序的文件名

每个文件名的顺序为category\u count\u randomString.JPEG。举个例子,下面是文件夹中的一个图像:

13_2_5jdf.JPEG
其中13是类别,2是图像中该类别的计数,后跟随机字符串

我希望能够:

  • 从每个文件名中提取类别并将其指定为标签(然后构建CNN模型),然后
  • 从每个文件名中提取类别的计数,并将其分配给向量/数组
  • 现在,我刚刚使用glob函数加载了图像(还没有作为数组)

    import glob
    
    data = '/Users/Data'
    
    images = glob.glob(data+'/*.JPEG')
    

    我是编码新手,因此我正在寻找能够提供“防白痴”编码行的人,我可以将这些代码行合并到我的笔记本中以使其正常工作。

    您可以使用
    os
    获取数据目录中所有文件的列表,并使用
    split
    命令获取文件名中的信息:

    import os
    
    data_path = "/Users/Data"
    
    categories = []
    counts = []
    rand_strs = []
    
    for img_filename in os.listdir(data_path):
        if img_filename.endswith(".JPEG"):
            category, count, rand_str = img_filename.split('.')[0].split('_')
            categories.append(category)
            counts.append(int(count))
            rand_strs.append(rand_str)
    
    每个列表的索引都是相同的,因此,例如,如果您想知道13类的计数,您可以这样做

    category_idx = categories.index('13')
    print "Category %s has %d elements" % (categories[category_idx], counts[category_idx])
    

    您希望如何在最后加载图像。numpy数组?您可以在文件名上使用
    .split(“”“)
    按下划线分割它们---这将为您提供一个包含三个字符串的数组,其中包含下划线分割的内容<代码>类别,计数,结束='13_2_5jdf.JPEG'。拆分('uu')将设置
    类别='13'
    计数='2'
    ,和
    结束='5jdf.JPEG'
    。您还可以查看
    os.path
    模块以分离JPEG扩展名(如果需要),也可以分离路径并从路径字符串中删除前面的文件夹。@adamconkey yes,作为numpy数组。在将其拆分为x_train&y_train:x=np.array([np.array(Image.open(fname))表示图像中的fname])@AlexanderReynolds这是一个好的开始。但是我如何在1300张图片上循环呢?感谢你的帮助!因此,我粘贴了整个代码,并在'for'命令后面的第一行出现错误“没有足够的值来解包(预期为3,得到1)”。你知道这是怎么回事吗?对不起,我完全不知道。如果你的文件格式是你说的CATEGORY\u COUNT\u RAND.jpeg,那么
    上的
    拆分
    应该给出一个
    ['CATEGORY\u COUNT\u RAND','jpeg']
    列表,然后它接受第一个元素并在
    '
    上拆分,这应该给你一个包含三个元素的列表:
    ['CATEGORY'、'COUNT'、'RAND']
    该目录中的所有文件都有这种格式吗?如果没有,那么上面的代码就会中断。我可以进一步检查该目录中是否至少所有JPEG文件都符合这种格式。完全一样。所有1300个文件都是这样。但奇怪的是,我得到了这个错误。你知道是什么原因吗?@halfer fair,我同意你说的,我只知道我能回答这个问题,因为我一直都在做这种事情。