Python中空白文件的mmap文件查询

Python中空白文件的mmap文件查询,python,mmap,Python,Mmap,我在获取文件到内存映射时遇到一些问题,希望解决此问题。我已经详细说明了这个问题,并在下面显示了我的代码 我要导入的内容: import os import mmap 现在,对于代码: file = r'otest' # our file name if os.path.isfile(file): # test to see if the file exists os.remove(file)

我在获取文件到内存映射时遇到一些问题,希望解决此问题。我已经详细说明了这个问题,并在下面显示了我的代码

我要导入的内容:

import os
import mmap
现在,对于代码:

file = r'otest'                         # our file name
if os.path.isfile(file):                # test to see if the file exists
os.remove(file)                     # if it does, delete it
f = open(file, 'wb')                    # Creates our empty file to write to
print(os.getcwd())
下面是我在代码中遇到的问题(我已经包括了这两个问题,并且每次运行程序时都有一个问题被注释掉):

我在任一mfile行中遇到错误。 对于带有
0
参数的
mmap.mmap
行,我得到以下错误:
ValueError:无法映射空文件
。如果改为使用
10**7
参数,则会出现以下错误:
PermissionError:[WinError 5]访问被拒绝

为此:

"""
    Other stuff goes here
"""
f.close()                               # close out the file
“这里的其他东西”只是一个占位符,我将把更多的代码放在这里做事情


只是补充一下,我发现了我认为可能有用的功能,但是
ftruncate
os.truncate
函数似乎都没有帮助解决当前的问题。

正如您链接的线程所示,mmap要求您先创建文件,然后修改它。 首先,创建一个空文件,执行以下操作:

f = open(FILENAME, "wb")
f.write(FILESIZE*b'\0')
f.close()
然后,您将能够访问该文件并使用以下方法对其进行映射:

f = open(FILENAME, "r+b")
mapf = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_WRITE)
请注意文件的打开方式。请记住,您可以通过执行以下操作来刷新缓冲区(此处有更多详细信息):


如果您想让我详细了解其中任何一点,请告诉我。

mmap()
ing一个文件不会改变文件的大小。如果您想要
mmap()
1e7字节的文件,您需要事先做一些事情,以确保该文件实际上至少有那么大……我已经考虑过了,但知道必须有一种方法将数据填充到为mmap()预留的预分配空间中,而不是从一个预期大小的文件开始。
f = open(FILENAME, "r+b")
mapf = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_WRITE)
sys.stdout.flush()