如何使用输入文件的相同名称作为输出文件的名称?

How to use the same name of an input file for the name of an output file?

我有以下代码:

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)

到目前为止,密码是 运行ning。我唯一需要知道的是:如何将 numpy 数组保存为与原始输入文件同名的 .npy 文件?

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

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

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

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

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

您可以使用此语法从字符串末尾删除字符 [:-3]

例如

tmp = "filename.tif"
print(tmp[:-3])

结果

filename.

同样,你可以用它来从头或尾获取一个字符串;

tmp = "filename.tif"
print(tmp[:3])
print(tmp[3:])

结果

fil
tif

更新您的代码以使用 "{}.npy".format(filename[:-4]) 会将 tif 替换为 npy

# save to npy file
np.save("/home/ripperflo/Downloads/nightlight_z-array/{}.npy".format(filename[:-3]), z_norm)