首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PermissionError:[WinError 32]与fits文件

PermissionError:[WinError 32]与fits文件
EN

Stack Overflow用户
提问于 2020-10-10 19:37:14
回答 1查看 358关注 0票数 0

我试图使用以下代码和FITS包将FITS文件从一个文件夹读取和移动到另一个文件夹:

代码语言:javascript
复制
    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+'/')

这是完美的,但当我取消评论时,注释行:

代码语言:javascript
复制
        Visibility_2_fichier = fichier["OI_VIS2"].data["VIS2DATA"]

这将不再起作用,并引发以下错误:

代码语言:javascript
复制
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版本来打开文件,但是这并没有改变任何事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。(只要没有其他对数据数组的引用,它就能工作。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64297506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档