如何使用 os.listdir 仅选择文件类型



在连接了同一图像的 10 条后,我想将它们转换为反射率,因此将它们除以 10,000。尽管如此,我的文件夹中有两种类型的文件,除了我只想将我的代码应用于 my.img 文件而不是 .hdr...你知道我如何使用os.listdir进行此选择吗?

我的代码如下:

import os
import spectral as sp 
import spectral.io.envi as envi
src_directory = "/d/afavro/Bureau/3_stack/"
dossier = os.listdir (src_directory)
print(dossier)
for fichier in dossier:
    print (fichier)

    ssrc_directory = "/d/afavro/Bureau/3_stack/" + fichier 
    rasters = os.listdir (ssrc_directory) 
    print(rasters) 

    OUTPUT_FOLDER = "/d/afavro/Bureau/4_reflectance/" + 'reflectance_' + fichier
    print(OUTPUT_FOLDER)
    if not os.path.exists(OUTPUT_FOLDER):
        os.makedirs(OUTPUT_FOLDER)
    for image in rasters:
        print (image)
        img = sp.open_image(image)
        print("%s opened successfully" %os.path.basename(image))
        im_HS = img[:,:,:]/10000
        header = envi.read_envi_header('/d/afavro/Bureau/3_stack/'+ image)
        #Save index image
        sp.envi.save_image(OUTPUT_FOLDER + '/reflectance_' + image, im_HS, metadate = header, force = True, interleave = 'bsq')

我认为制作红豆杉循环是个好主意,但我不知道该怎么做......想法?

使用 os.path.splitext 查找文件的扩展名

for f in os.listdir('<path>'):
    name, ext = os.path.splitext(f)
    if ext == '.img':
        #do stuff

你为什么不使用glob

from glob import glob
for f in glob('/your/path/*.img'):
    pass  # add your code here

你好 您可以将 Pathlib 用作面向对象的路径管理库

并做类似的事情

from Pathlib2 import Path
pattern_1 = "type1"
pattern_2 = "type2"
list_pattern_1_files = list(Path(<YOUR_PATH>).glob(f'**/*.{pattern_1}'))
list_pattern_2_files = list(Path(<YOUR_PATH>).glob(f'**/*.{pattern_2}'))

如果你想坚持使用listdir,你可以尝试:

files = [ f for f in os.listdir('folder') if f.endswith('.img') ]

相关内容

  • 没有找到相关文章