我正在嘗試使用此代碼和包讀取FITS文件并將其從一個文件夾移動到另一個文件夾shutil: MATISSE_DIR_N = MATISSE_DIR+'N' MATISSE_DIR_LM = MATISSE_DIR+'LM' MATISSE_DIR_TRASH = MATISSE_DIR+'TRASH' for filenames in glob.glob(MATISSE_DIR+'*.fits'): print(filenames) FOLDER_FLAG_LM = False FOLDER_FLAG_N = False FOLDER_FLAG_TRASH = False if 'IR-N' in filenames: FOLDER_FLAG_N = True elif 'IR-LM' in filenames: FOLDER_FLAG_LM = True fichier = fits.open(filenames) # VISIBILITY # Visibility_2_fichier = fichier["OI_VIS2"].data["VIS2DATA"] fichier.close() if np.logical_and(FOLDER_FLAG_TRASH==False,FOLDER_FLAG_N==True): shutil.move(filenames,MATISSE_DIR_N+'/') elif np.logical_and(FOLDER_FLAG_TRASH==False,FOLDER_FLAG_LM==True): shutil.move(filenames,MATISSE_DIR_LM+'/') elif FOLDER_FLAG_TRASH == True : shutil.move(filenames,MATISSE_DIR_TRASH+'/')這完美地工作,但是當(dāng)我取消注釋注釋行時: Visibility_2_fichier = fichier["OI_VIS2"].data["VIS2DATA"]這不再有效并會出現(xiàn)以下錯誤:runfile('C:/Users/jdrevon/Desktop/THESE/Modeling/DATA_SORTING/untitled0.py', wdir='C:/Users/jdrevon/Desktop/THESE/Modeling/DATA_SORTING')C:/Users/jdrevon/Desktop/THESE/DATA/DATA_RSCL_test/NOMEANBCD\NAMEOFMYFILETraceback (most recent call last): File "C:\Users\jdrevon\anaconda3\lib\shutil.py", line 788, in move os.rename(src, real_dst)PermissionError: [WinError 32] Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus: 'C:/Users/jdrevon/Desktop/THESE/DATA/DATA_RSCL_test/NOMEANBCD\\NAMEOFMYFILE' -> 'C:/Users/jdrevon/Desktop/THESE/DATA/DATA_RSCL_test/NOMEANBCD/LM/NAMEOFMYFILE'我不明白為什么fichier.close()當(dāng)您開始存儲來自數(shù)據(jù)文件的數(shù)據(jù)時,該命令不再足以關(guān)閉文件。我已經(jīng)嘗試過用with我的代碼版本來打開文件,但這并沒有改變?nèi)魏螙|西。
1 回答

狐的傳說
TA貢獻1804條經(jīng)驗 獲得超3個贊
文檔中的此警告應(yīng)該可以回答您的問題(也許該警告應(yīng)該移至其他地方,因為它不僅僅針對“大文件”):
當(dāng)使用 打開文件時
memmap=True
,由于 mmap 的工作原理,這意味著當(dāng)訪問 HDU 數(shù)據(jù)(即hdul[0].data
)時,mmap 將打開 FITS 文件的另一個句柄。這意味著即使在調(diào)用hdul.close()
mmap 之后,仍然保留數(shù)據(jù)的打開句柄,以便仍然可以被粗心的程序訪問,這些程序是假設(shè) .data 屬性在內(nèi)存中擁有所有數(shù)據(jù)而構(gòu)建的。為了強制 mmap 關(guān)閉,要么等待包含的
HDUList
對象超出范圍,要么手動調(diào)用del hdul[0].data
.?(只要沒有其他對數(shù)據(jù)數(shù)組的引用,此操作就有效。)
添加回答
舉報
0/150
提交
取消