我只是想用Python在windows中mmap()
一个文件,但它每次都会抛出PermissionError: [WinError 5]
。
我刚刚写了一个复制这种行为的最小示例。
import mmap
import pickle
import random
print("Generate 1 million k/v data points")
garbage = { f'key_{x}_{random.uniform(1000,9999)}': random.uniform(1,9999999) for x in range(1000_000) }
print("Picking that garbage")
with open('test.pickle','wb') as fp:
pickle.dump(garbage, fp)
print("Now trying to mmap the file...")
with open('test.pickle','rb') as fp:
mapped = mmap.mmap(fp.fileno(), 0)
print('Not reached. The line above throws PermissionError: [WinError 5] Permission Denied')
如何摆脱那个讨厌的Permission Error: [WinError 5]
?
既然我是写文件的人,就不应该有权限问题,对吧?
问题出在mmap.mmap()
调用中。
要修复此错误,只需添加access=mmap.ACCESS_READ
以匹配打开文件的模式((。
mapped = mmap.mmap(fp.fileno(), 0, access=mmap.ACCESS_READ)
默认情况下,它尝试使用写入权限映射文件,但以只读模式打开。