python - 如何使用输入文件的相同名称作为输出文件的名称?
问题描述
我有以下代码:
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'
。该过程稍后将循环运行。因此,文件夹中的每个文件都将被规范化并以相同的名称但以不同的文件格式保存在不同的文件夹中。
解决方案
如果您使用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)
推荐阅读
- asp.net-core - 提供了无效的请求 URI。请求 URI 必须是绝对 URI,或者必须设置 BaseAddress。在 Blazor
- python - 迭代和更改 python numpy 矩阵列的值
- xcode - Xcode 11.1:未显示测试指标
- javascript - 如何使用带有钩子的反应功能组件测试句柄函数调用
- matlab - 在 MATLAB 中读取 imageSet 的描述/标签
- angular - Angular:如何根据选择另一个日期输入来验证日期输入
- flutter - 如何在 Flutter 中将平面颜色导入我的项目?
- rundeck - Rundeck 是否提供插件以在启动时从文件加载作业?
- node.js - Mongodb mongoose 模型将它们全部从 index.js 文件中导出
- python - 有没有办法找出两个文件的哈希值?