2017-05-31 344 views
0

我一直在python中使用gdal幾年,過去幾天我發現我懷疑可能是gdal驅動程序的Create中的一個錯誤命令。我正在使用Landsat圖像,並且每次都在相同的結果下嘗試了下面的代碼。在某些情況下,當我調用create時,它會刪除目錄中的另一個文件(總是MTL文件)。gdal.driver.create正在刪除目錄中的另一個文件

import gdal 

path = '.../LC80110112013243LGN00/' #path to where ever your landsat scene is 

outfile = path+path[-22:-1]+'_B5_test.tif' 
#outfile = path + 'TestB5.tif' 

infile = path+path[-22:-1]+'_B5.tif' 

infile_open = gdal.Open(infile) 
infile_array = infile_open.GetRasterBand(1).ReadAsArray() 

dtype=gdal.GDT_Float32 

outfile = gdal.GetDriverByName('GTiff').Create(outfile, infile_array.shape[1], infile_array.shape[0], 1, dtype) 

infile_open = None 
outfile = None 
infile_array = None 

如果我用第OUTFILE名稱,它創建了一個文件名的陸地衛星頻段的其他文件進行匹配,並將文件「OUTFILE」已經存在,它會被替換(預期的行爲),並且遇到了文件被刪除(意外行爲)。如果我使用與Landsat波段文件名格式不匹配的第二個outfile名稱,當我運行代碼時,如果「outfile」已經存在,它將簡單地替換舊文件(預期行爲)。我一直無法找到任何其他的參考。任何想法發生了什麼?

+0

我不能用'gdal.VersionInfo()=='2010100''複製這個。 使用'_B5_test.tif'文件時,會創建'...._ B5_test.IMD'文件,但不會刪除'.MTL'文件。當使用'TestB5.tif' outfile時,沒有創建元數據文件。 –

+0

感謝@LoganByers。您是否已經嘗試使用..._ B5_test.tif文件多次運行代碼?在第一次運行時(_B5_test.tif不存在),我的.MTL文件保留並創建test.tif文件,但是如果我第二次運行代碼(例如_B5_test.tif已存在並且應該被替換),.MTL文件仍然消失。我不認爲我見過創建一個.IMD文件,這很有趣。我在Mac上通過spader使用'gdal.VersionInfo()=='2010300'',它是在anaconda環境中啓動的。如果這有幫助,我很樂意提供上述版本。 – Jessica

回答

0

同樣!

GDAL版本:2.1.3 GDAL發佈2017/20/01

Paltform:Ubuntu的LTS 16.04

出的情況,以便:

. . . if os.path.exists(outputFileName): os.remove(outputFileName) dst_ds = driver.Create(outputFileName, width, height, bands_value, gdal.GDT_Float32) . . .

+0

我很高興別人複製了這個問題! os.remove絕對是一個很好的解決方法(upvoted你的答案),這只是一個奇怪的問題,必須從頭開始。請分享,如果你最終發現更多關於這是什麼原因的信息。 – Jessica

相關問題