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()