PermissionError: [WinError 32] for creating files
PermissionError: [WinError 32] for creating files
有一段代码如下
try:
f = h5py.File(filename, 'w-')
except:
os.remove(filename)
f = h5py.File(filename, 'w-')
运行 程序出现与上述代码段相关的错误。我认为这是因为文件没有关闭。 google了一下类似的错误信息,貌似可以解决using "with" statement,但是不知道如何修改上面的代码段
OSError Traceback (most recent call last)
<ipython-input-19-1f1f9c5eb3dd> in vid_to_hdf(En, start, end, chunk)
9 try:
---> 10 f = h5py.File(filename, 'w-')
11 except:
~\AppData\Local\Continuum\anaconda3\envs\fastai-py37\lib\site-packages\h5py\_hl\files.py in __init__(self, name, mode, driver, libver, userblock_size, swmr, rdcc_nslots, rdcc_nbytes, rdcc_w0, track_order, **kwds)
407 fapl, fcpl=make_fcpl(track_order=track_order),
--> 408 swmr=swmr)
409
~\AppData\Local\Continuum\anaconda3\envs\fastai-py37\lib\site-packages\h5py\_hl\files.py in make_fid(name, mode, userblock_size, fapl, fcpl, swmr)
176 elif mode in ['w-', 'x']:
--> 177 fid = h5f.create(name, h5f.ACC_EXCL, fapl=fapl, fcpl=fcpl)
178 elif mode == 'w':
h5py\_objects.pyx in h5py._objects.with_phil.wrapper()
h5py\_objects.pyx in h5py._objects.with_phil.wrapper()
h5py\h5f.pyx in h5py.h5f.create()
OSError: Unable to create file (file exists)
During handling of the above exception, another exception occurred:
PermissionError Traceback (most recent call last)
<timed eval> in <module>
<ipython-input-19-1f1f9c5eb3dd> in vid_to_hdf(En, start, end, chunk)
10 f = h5py.File(filename, 'w-')
11 except:
---> 12 os.remove(filename)
13 f = h5py.File(filename, 'w-')
14 # Create dataset within file
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'E23.hdf5'
首先,请先尝试删除该文件,然后再使用它。
如果做不到,请尝试读取文件内容、删除 File 对象、删除文件然后写入文件。
如果这不起作用,试试这个:
with h5py.File(filename, 'w-') as f:
# This is where you put what you're going to do with f
# At the end of the with statement, the object gets deleted.
try:
os.remove(filename)
except:
pass
附带说明一下,共享代码示例中有些地方不清楚:
try:
f = h5py.File(filename, 'w-')
except:
os.remove(filename)
f = h5py.File(filename, 'w-') # <- why the error handling code is repeating exactly as the code that just failed to run?
打开系统资源(如文件)时,存储了 information/state 关于该资源的内容,作为程序的干净行为(例如关闭文件句柄),应该 released/closed操作系统)。
所以在Python
my_file = open('myfile.txt', 'r') # getting the resource
my_file.readlines() # using the resources
my_file.close() # closing the file, releasing system resources
为了更容易做到这一点,一些 API 提供了一个 context manager that can be used in a with 块:
with open('myfile.txt', 'r') as my_file:
my_file.readlines()
# after the with block, the context manager automatically calls close() when exiting the runtime context
h5py
provides 这样的 API,因此 h5py.File
实例也可以在 with
块中使用:
with h5py.File(filename, 'w-') as f:
pass # do your processing with f
# now after the block, the file is closed
请注意,关闭文件并不意味着删除它。因此在代码中关闭文件并释放系统资源后,文件将保留在磁盘上,直到被删除。但在许多情况下,这是预期的行为,因为文件是程序的结果。
如果你想确保文件总是被删除,你可以使用一个 try/finally
块,但请注意,在你的程序运行后磁盘上将没有文件:
try:
with f = h5py.File(filename, 'w-'):
pass # use the file resource
finally:
if os.path.exists(filename):
os.remove(filename)
有一段代码如下
try:
f = h5py.File(filename, 'w-')
except:
os.remove(filename)
f = h5py.File(filename, 'w-')
运行 程序出现与上述代码段相关的错误。我认为这是因为文件没有关闭。 google了一下类似的错误信息,貌似可以解决using "with" statement,但是不知道如何修改上面的代码段
OSError Traceback (most recent call last)
<ipython-input-19-1f1f9c5eb3dd> in vid_to_hdf(En, start, end, chunk)
9 try:
---> 10 f = h5py.File(filename, 'w-')
11 except:
~\AppData\Local\Continuum\anaconda3\envs\fastai-py37\lib\site-packages\h5py\_hl\files.py in __init__(self, name, mode, driver, libver, userblock_size, swmr, rdcc_nslots, rdcc_nbytes, rdcc_w0, track_order, **kwds)
407 fapl, fcpl=make_fcpl(track_order=track_order),
--> 408 swmr=swmr)
409
~\AppData\Local\Continuum\anaconda3\envs\fastai-py37\lib\site-packages\h5py\_hl\files.py in make_fid(name, mode, userblock_size, fapl, fcpl, swmr)
176 elif mode in ['w-', 'x']:
--> 177 fid = h5f.create(name, h5f.ACC_EXCL, fapl=fapl, fcpl=fcpl)
178 elif mode == 'w':
h5py\_objects.pyx in h5py._objects.with_phil.wrapper()
h5py\_objects.pyx in h5py._objects.with_phil.wrapper()
h5py\h5f.pyx in h5py.h5f.create()
OSError: Unable to create file (file exists)
During handling of the above exception, another exception occurred:
PermissionError Traceback (most recent call last)
<timed eval> in <module>
<ipython-input-19-1f1f9c5eb3dd> in vid_to_hdf(En, start, end, chunk)
10 f = h5py.File(filename, 'w-')
11 except:
---> 12 os.remove(filename)
13 f = h5py.File(filename, 'w-')
14 # Create dataset within file
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'E23.hdf5'
首先,请先尝试删除该文件,然后再使用它。
如果做不到,请尝试读取文件内容、删除 File 对象、删除文件然后写入文件。
如果这不起作用,试试这个:
with h5py.File(filename, 'w-') as f:
# This is where you put what you're going to do with f
# At the end of the with statement, the object gets deleted.
try:
os.remove(filename)
except:
pass
附带说明一下,共享代码示例中有些地方不清楚:
try:
f = h5py.File(filename, 'w-')
except:
os.remove(filename)
f = h5py.File(filename, 'w-') # <- why the error handling code is repeating exactly as the code that just failed to run?
打开系统资源(如文件)时,存储了 information/state 关于该资源的内容,作为程序的干净行为(例如关闭文件句柄),应该 released/closed操作系统)。
所以在Python
my_file = open('myfile.txt', 'r') # getting the resource
my_file.readlines() # using the resources
my_file.close() # closing the file, releasing system resources
为了更容易做到这一点,一些 API 提供了一个 context manager that can be used in a with 块:
with open('myfile.txt', 'r') as my_file:
my_file.readlines()
# after the with block, the context manager automatically calls close() when exiting the runtime context
h5py
provides 这样的 API,因此 h5py.File
实例也可以在 with
块中使用:
with h5py.File(filename, 'w-') as f:
pass # do your processing with f
# now after the block, the file is closed
请注意,关闭文件并不意味着删除它。因此在代码中关闭文件并释放系统资源后,文件将保留在磁盘上,直到被删除。但在许多情况下,这是预期的行为,因为文件是程序的结果。
如果你想确保文件总是被删除,你可以使用一个 try/finally
块,但请注意,在你的程序运行后磁盘上将没有文件:
try:
with f = h5py.File(filename, 'w-'):
pass # use the file resource
finally:
if os.path.exists(filename):
os.remove(filename)