为了账号安全,请及时绑定邮箱和手机立即绑定

PermissionError: [WinError 32] 适合文件

PermissionError: [WinError 32] 适合文件

哆啦的时光机 2023-10-31 14:05:39
我正在尝试使用此代码和包读取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+'/')这完美地工作,但是当我取消注释注释行时:        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\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()当您开始存储来自数据文件的数据时,该命令不再足以关闭文件。我已经尝试过用with我的代码版本来打开文件,但这并没有改变任何东西。
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

文档中的此警告应该可以回答您的问题(也许该警告应该移至其他地方,因为它不仅仅针对“大文件”):

当使用 打开文件时memmap=True,由于 mmap 的工作原理,这意味着当访问 HDU 数据(即hdul[0].data)时,mmap 将打开 FITS 文件的另一个句柄。这意味着即使在调用hdul.close()mmap 之后,仍然保留数据的打开句柄,以便仍然可以被粗心的程序访问,这些程序是假设 .data 属性在内存中拥有所有数据而构建的。

为了强制 mmap 关闭,要么等待包含的HDUList对象超出范围,要么手动调用del hdul[0].data. (只要没有其他对数据数组的引用,此操作就有效。)


查看完整回答
反对 回复 2023-10-31
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信