我试图使用以下代码和FITS包将FITS文件从一个文件夹读取和移动到另一个文件夹:
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+'/')这是完美的,但当我取消评论时,注释行:
Visibility_2_fichier = fichier["OI_VIS2"].data["VIS2DATA"]这将不再起作用,并引发以下错误:
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\NAMEOFMYFILE
Traceback (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'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\jdrevon\Desktop\THESE\Modeling\DATA_SORTING\untitled0.py", line 76, in <module>
V2_MATISSE,UV, UV_TP,TP_MATISSE,FLUX_MATISSE = OIFITS_READING(MATISSE_DIR)
File "C:\Users\jdrevon\Desktop\THESE\Modeling\DATA_SORTING\untitled0.py", line 64, in OIFITS_READING
shutil.move(filenames,MATISSE_DIR_LM+'/')
File "C:\Users\jdrevon\anaconda3\lib\shutil.py", line 803, in move
os.unlink(src)
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'我不明白为什么当您开始存储来自数据文件的数据时,fichier.close()命令不足以关闭该文件。我已经尝试过我的代码的with版本来打开文件,但是这并没有改变任何事情。
发布于 2020-10-14 16:12:53
文档中的此警告应该回答您的问题(也许警告应该移到别处,因为它不仅仅是针对“大文件”的):
当使用
memmap=True打开文件时,由于mmap的工作方式,这意味着当访问HDU数据(即hdul[0].data)时,mmap会打开FITS文件的另一个句柄。这意味着,即使在调用hdul.close()之后,mmap仍然保持数据的开放句柄,以便仍然可以被不小心的程序访问,这些程序构建时假定.data属性中有所有数据在内存中。 为了强制mmap关闭,要么等待包含的HDUList对象超出作用域,要么手动调用del hdul[0].data。(只要没有其他对数据数组的引用,它就能工作。)
https://stackoverflow.com/questions/64297506
复制相似问题