如何在文件夹中创建图像列表及其名称

How to create a list of images and their names in a folder

我正在使用以下代码创建扩展名为 tif 的图像文件列表。代码的当前结果是一个包含 .tif 文件地址的列表。

raster_list=[]

def getFiles(path):
    for file in os.listdir(path):
        if file.endswith(".tif"):
            raster_list.append(os.path.join(path, file))
getFiles(fpath)
print(raster_list)
len(raster_list)

结果:

['C:/dataset/test\ras1.tif', 'C:dataset/test\ras2.tif', 'C:/dataset/test\ras3.tif', 'C:/dataset/test\ras4.tif', 'C:/dataset/test\ras5.tif']

我如何修改代码以创建两个列表 a) 带有 .tif 的文件名 b) 文件名。这是示例:

raster_list = ['ras1.tif','ras2.tif','ras3.tif','ras4.tif', 'ras5.tif' ]
raster_name = ['ras1','ras2','ras3','ras4', 'ras5']

编辑解决方案中的代码:

from os import path
raster_list=[]

def getFiles(path):
    for file in os.listdir(path):
        if file.endswith(".tif"):
            raster_list.append(file) #remove the os.join, just take the file name
getFiles(fpath)
raster_names = [path.splitext(x)[0] for x in raster_list]
print(raster_list)
print(raster_names)

结果:

['ras1.tif', 'ras2.tif', 'ras3.tif', 'ras4.tif', 'ras5.tif']
['ras1', 'ras2', 'ras3', 'ras4', 'ras5']

用'\'拆分,取出最后一个元素并将其附加到第一个列表, 然后将其拆分为“.”,获取第一个元素并将其附加到第二个列表?

或者,您可以使用这些内置函数:https://docs.python.org/3/library/os.path.html

对于您想要的第一个列表,您可以只对列表的每个术语使用函数 split("") 并使用由 split 创建的列表的最后一个元素。 对于第二个,您只需使用您创建的第一个列表并拆分为“.”,您只需保存列表的第一个元素即可。

L = ['C:/dataset/test\ras1.tif', 'C:dataset/test\ras2.tif', 'C:/dataset/test\ras3.tif', 'C:/dataset/test\ras4.tif', 'C:/dataset/test\ras5.tif']
raster_list = []
raster_name = []
for i in L:
    a = i.split("\")[1]
    raster_list.append(a)
    raster_name.append(a.split(".")[0])
print(raster_list, raster_name)

但您也可以尝试不在 rather_list 中包含路径,例如:

raster_list=[]

def getFiles(path):
    for file in os.listdir(path):
        if file.endswith(".tif"):
            raster_list.append(file) #remove the os.join, just take the file name
getFiles(fpath)
print(raster_list)
len(raster_list)

您可以将两者合并为:

raster_list=[]
raster_names=[]

def getFiles(path):
    for file in os.listdir(path):
        if file.endswith(".tif"):
            raster_list.append(file) 
            raster_names.append(file.split(".")[0])

getFiles(fpath)
print(raster_list, raster_names)

您可以使用 os.path() 方法来实现您想要的。

import os
raster_list = []
raster_name = []

def getFiles(path):
    for file in os.listdir(path):
        if file.endswith(".tif"): 
            raster_list.append(os.path.basename(file))
            raster_name.append(os.path.splitext(file)[0])

getFiles(fpath)
print(raster_list)
print(raster_name)

len(raster_list)

就我个人而言,我会使用 pathlib,因为它 OS 独立且可靠:

>>> from pathlib import Path
>>> files = ['/tmp/ras1.tif', '/tmp/ras2.tif', '/tmp/ras3.tif']
>>> [Path(file).name for file in files]
['ras1.tif', 'ras2.tif', 'ras3.tif']
>>> [Path(file).stem for file in files]
['ras1', 'ras2', 'ras3']