在windows中尝试mmap()文件会抛出PermissionError:[WinError5],即使我写入了该文件



我只是想用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)

默认情况下,它尝试使用写入权限映射文件,但以只读模式打开。

最新更新