我是python的初学者。当我想从具有名称的文件夹中导入一些图像时,会发生我的问题。
我的文件: building_3.tif building_21.tif building_22.tif building_25.tif building_27.tif building_36.tif building_44.tif building_49.tif building_53.tif building_70.tif building_101.tif building_248.tif building_1002.tif
我只是想导入它们并分别放置在nd矩阵(张量)中。 例如,如果我们有(14,264,120)张量,则building_1002应该放置在最后(13,264,120)中,而building_3应该放置在第一(0,264,120)中。import numpy as np
import glob
import os
from PIL import Image
path = '/path/'
image_list = []
all_data =np.zeros((14,264,120))
i=0
for filename in glob.glob(path + '/building_*.tif'):
im=Image.open(filename)
image_list.append(im)
n = len(image_list)
all_data[i,:,:]=im
i=i+1
分别发生的是: building_1002.tif(264,120,4) building_101.tif(264,120,4) building_21.tif(264,120,4) building_22.tif(264,120,4) building_23.tif(264,120,4) building_248.tif(264,120,4) building_25.tif(264,120,4) building_27.tif(264,120,4) building_3.tif(264,120,4) building_36.tif(264,120,4) building_44.tif(264,120,4) building_49.tif(264,120,4) building_53.tif(264,120,4) building_70.tif(264,120,4)
提前感谢您的合作
答案 0 :(得分:1)
您可以预先对文件名进行排序
names = glob.glob(path + '/building_*.tif')
names = sorted(names,lambda x:x.split(".")[0].split("_")[1])
然后使用名称数组读取for循环中的文件。
答案 1 :(得分:0)
似乎您只为(14,264,120)分配了14 *(264,120,4)的空间。也许您应该为图片分配足够的空间(264,120,4 * 14)。
答案 2 :(得分:0)
谢谢大家。 来自venkata krishnan 并通过此链接How to sort this list of strings using a substring?
正确答案是:
names = glob.glob('building_*.tif')
list_names= sorted(names, key=lambda elem:int(elem[elem.find('_')+1:elem.find('.')]))