Python 如何使用输入文件的相同名称作为输出文件的名称?
我有以下代码:Python 如何使用输入文件的相同名称作为输出文件的名称?,python,python-3.x,numpy,path,filenames,Python,Python 3.x,Numpy,Path,Filenames,我有以下代码: 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)
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)
如果使用
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)
您可以使用以下语法从字符串末尾删除字符
[:-3]
e、 g
结果
fil
tif
文件名。
类似地,您可以使用它从开头或结尾获取字符串
tmp = "filename.tif"
print(tmp[:3])
print(tmp[3:])
结果
fil
tif
更新代码以使用“{}.npy”。格式(文件名[:-4])
将用npy
替换tif
# save to npy file
np.save("/home/ripperflo/Downloads/nightlight_z-array/{}.npy".format(filename[:-3]), z_norm)
您可以使用以下语法从字符串末尾删除字符
[:-3]
e、 g
结果
fil
tif
文件名。
类似地,您可以使用它从开头或结尾获取字符串
tmp = "filename.tif"
print(tmp[:3])
print(tmp[3:])
结果
fil
tif
更新代码以使用“{}.npy”。格式(文件名[:-4])
将用npy
替换tif
# save to npy file
np.save("/home/ripperflo/Downloads/nightlight_z-array/{}.npy".format(filename[:-3]), z_norm)
我不确定你的问题到底是什么。首先,您调用的
np.save
错误。第一个参数是路径,第二个参数是数组。您正在传递三个参数。此外,还可以说:“如果文件是字符串或路径,那么如果文件名还没有扩展名,.npy将附加到文件名。”。你的代码有什么问题?您当前的输出是什么?它与您预期的输出有何不同?你有错误吗?这能回答你的问题吗?是的,我知道,我只是想弄清楚,保存的每个numpy文件都有与其输入文件相同的名称。这是我的问题:我如何使我的输出文件与输入文件具有相同的名称,当然除了扩展名之外。这是另一种形式,这是否回答了你的问题?这回答了你的问题吗?我不确定你的问题到底是什么。首先,您调用的np.save
错误。第一个参数是路径,第二个参数是数组。您正在传递三个参数。此外,还可以说:“如果文件是字符串或路径,那么如果文件名还没有扩展名,.npy将附加到文件名。”。你的代码有什么问题?您当前的输出是什么?它与您预期的输出有何不同?你有错误吗?这能回答你的问题吗?是的,我知道,我只是想弄清楚,保存的每个numpy文件都有与其输入文件相同的名称。这是我的问题:我如何使我的输出文件与输入文件具有相同的名称,当然除了扩展名之外。这是另一种形式,这是否回答了你的问题?这回答了你的问题吗?“如果文件是字符串或路径,如果它还没有扩展名,.npy将附加到文件名上。”@Tomerikoo文档确实这么说,但我想说这是“显式优于隐式”的好例子。在这种情况下,如果您使用pathlib
,只执行路径(文件名)不是更容易(更清晰)吗('.npy')
?@Tomerikoo我个人没有使用带有后缀的,但因为它确实做了同样的事情。似乎这取决于个人偏好,因为它创建了一个f字符串。我发现{Path(filename).stem}.npy更容易阅读,但我认为{Path(filename).带有后缀('.npy')}
可能被认为是更明确的。不管怎样,现在我知道了,我必须尝试使用带有后缀的。“如果文件是字符串或路径,如果它没有扩展名,.npy将附加到文件名上。”@Tomerikoo文档确实这么说,但我会说这是“显式优于隐式”的好例子在这种情况下,如果您使用的是pathlib
,那么只使用suffix('.npy')执行Path(filename)
?@Tomerikoo我个人没有使用带有后缀的,但因为它做了同样的事情,当然。似乎这取决于个人偏好,因为它创建了一个f字符串。我发现{Path(filename).stem}.npy
更容易阅读,但我认为{Path(filename).带有后缀('.npy')}
可能会被认为是更明确的。无论哪种方式,我都必须尝试使用带有后缀的,
。如果将路径视为字符串,则最好使用。另外请注意,“如果文件是字符串或路径,如果文件名还没有扩展名,则会在文件名后附加.npy扩展名。”如果将路径视为字符串,则最好使用.并注意“如果文件是字符串或路径,如果文件名还没有扩展名,.npy将附加到文件名。”