python - PermissionError: [WinError 32] 适合文件
问题描述
我正在尝试使用此代码和包读取文件并将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\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
我的代码版本来打开文件,但这并没有改变任何东西。
解决方案
文档中的这个警告应该回答你的问题(也许应该把警告移到其他地方,因为它不仅仅针对“大文件”):
当使用 . 打开文件时
memmap=True
,由于 mmap 的工作方式,这意味着当访问 HDU 数据时(即hdul[0].data
),另一个指向 FITS 文件的句柄由 mmap 打开。这意味着即使在调用hdul.close()
mmap 之后仍然持有数据的打开句柄,因此它仍然可以被粗心的程序访问,这些程序是在假设 .data 属性具有内存中的所有数据的情况下构建的。为了强制关闭 mmap,要么等待包含
HDUList
对象超出范围,要么手动调用del hdul[0].data
. (只要没有其他对数据数组的引用,此方法就有效。)
推荐阅读
- c# - 如何在 Program 类中/从 Program 类中访问 DbContext?
- monday.com - 如何在星期一使用其 API 查询多个板?
- jquery - 如何使用 jQuery 或 JavaScript 减少 html 标签内的值?
- sql - 从子句未加入 3 个类似,但适用于 2
- c - 如何在C中忽略txt文件的特定部分
- fullcalendar - Fullcalendar visibleRange 不适用于资源日网格
- flutter - Flutter 水平滚动列表 - 如何设置它比父级更宽
- spring - 从 Spring Boot 查询 2 ElasticSearch
- json - uri->body 内的 JSON 字符串内的 Ansible 循环
- ios - 多次请求位置许可