Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用输入文件的相同名称作为输出文件的名称?_Python_Python 3.x_Numpy_Path_Filenames - Fatal编程技术网

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将附加到文件名。”