首页 > 解决方案 > 如何使用输入文件的相同名称作为输出文件的名称?

问题描述

我有以下代码:

for filename in os.listdir('/home/ripperflo/Downloads/nightlight_geotiffs'):
    if filename.endswith('.tif'):           # take TIFF-files only
        with rasterio.open(os.path.join('/home/ripperflo/Downloads/nightlight_geotiffs', filename)) as f:           # open GeoTiff and store in f
            img = f.read()          # open GeoTiff as 3D numpy array
            matrix = img[0]         # 3D array to 2D array because nighlight images has only one band
            z_norm = stats.zscore(matrix)           # normalize 2D array

            # save to npy file
            np.save('/home/ripperflo/Downloads/nightlight_z-array/', filename, z_norm)

代码运行至今。我唯一需要知道的是:如何将 numpy 数组保存为与原始输入文件同名的 .npy 文件?

所以输入文件被调用'BJ2012_2.tif',输出文件应该被调用'BJ2012_2.npy'。该过程稍后将循环运行。因此,文件夹中的每个文件都将被规范化并以相同的名称但以不同的文件格式保存在不同的文件夹中。

标签: pythonpython-3.xnumpypathfilenames

解决方案


如果您使用pathlib.Path可以Path.stem用来获取文件名减去扩展名的对象

>>> p = Path('/home/ripperflo/Downloads/nightlight_geotiffs/BJ2012_2.tif').stem
'BJ2012_2'

您可以使用 stem 以正确的扩展名写出目标目录,如下所示:

np.save(f"/home/ripperflo/Downloads/nightlight_z-array/{Path(filename).stem}.npy", z_norm)

推荐阅读