2016-07-05 74 views
0

我有许多图像可供阅读。例如图像与a1.jpga2.jpg,...,a100.jpgb1.jpg,...,b100.jpgc1.jpgc2.jpg,...,c100.jpg名称。我想在循环中使用imread()函数来查找以a开头的那些图像。阅读以Python中的特定单词开头的图像

我使用这个命令:

for i in train: 
    im = misc.imread("/.../%s*.jpg" % i) 

*提到开始一个名的其余部分。我不知道该怎么写?

+0

我想通过_i_移过_train_列表。我的意思是使用'%s'对我很重要。 –

回答

2

它与imread本身无关。

既然你已经有文件名列表,你有几种选择:

  1. 使用filter只有文件名,结束了你想要的:

    relevant_files = filter(lambda name: name.startswith('a'), list_of_files) 
    for file_name in relevant_files: 
        im = misc.imread(file_name) 
    
  2. 使用列表理解:

    relevant_files = [file_name for file_name in list_of_files if file_name.startswith('a')] 
    for file_name in relevant_files: 
        im = misc.imread(file_name) 
    
  3. 使用简单的if之前读取图片:

    for i in train: 
        if i.startswith('a'): 
         im = misc.imread(i) 
    
  4. import glob,并用它作为注释所示@LaurentLAPORTE。

+3

你也可以使用'glob.glob'函数:'relevant_files = glob.glob(os.path.join(work_dir,“a * .jpg”))''。 –

+0

@LaurentLAPORTE当然,如果'glob'是跨平台的,我只能不确定我的头顶 – DeepSpace

+0

_train_ list是所有图像的名称。我想通过_i_移动列表。因此,_i_将成为通缉名字的开始。 –

0

快速&脏:

charToRead = 'a' 
for i in range(100): 
    s = charToRead + str(i+1) + '.jpg' 
    print(s) 
    im=misc.imread(s) 
0

你可以列出所有列表中的第一个图像和遍历他们。 假设,

a = ['a1.jpg', 'a2.jpg', 'a100.jpg','b10.jpg','c100.jpg'] 
matching = [s for s in a if s.startswith('a')] 

匹配的将是具有名称的所有图像的列表,开始与“一”字。

+0

_train_列表是所有图像的名称。我想通过_i_移动列表。因此,_i_将成为通缉名字的开始。 –

0

如果所有的图像都在同一剧目,你可以在这个剧目浏览所有的文件名,检查它是否被启动,如果是,则显示它imread。它会这样做:

import os 
for file in os.listdir("/mydir"): 
    if file.endswith(".jpg") and file.startwith("a"): 
     im=misc.imread(file) 

它应该工作。我希望它有帮助。

1

这是使用iterools.groupby

>>> x = ['a1.jpg', 'a2.jpg', 'b1.jpg', 'b2.jpg'] 
>>> groups = itertools.groupby(x, lambda t:t[0]) 
>>> for key,l in groups: 
... print (key) 
... for j in l: 
...  print (" ",j) 
... 
a 
(' ', 'a1.jpg') 
(' ', 'a2.jpg') 
b 
(' ', 'b1.jpg') 
(' ', 'b2.jpg') 

可以生成文件列表使用glob.globos.listdir一个有趣的地方。