首页 > 系统相关 >mmap:Python内存映射文件操作

mmap:Python内存映射文件操作

时间:2023-09-21 09:00:49浏览次数:58  
标签:文件 映射 Python mmap access 内存 print

前言

内存映射通常可以提高I/O的性能,因为使用内存映射时,不需要对每个访问都建立一个单独的系统调用,也不需要在缓冲区之间复制数据,内核和用户都能很方便的直接访问内存。

本篇,将详细介绍Python内存映射库:mmap。

mmap(读文件)

使用mmap()函数可以创建一个内存映射文件。该函数的第1个参数是一个文件描述符,可以通过file对象的fileno()函数获取;第2个参数是要映射的文件部分大小(单位字节),如果该值为0,映射整个文件,如果该参数大于文件大小,则扩展该文件。

示例如下:

import mmap

with open('英文文档.txt','r') as f:
    with mmap.mmap(f.fileno(),0,access=mmap.ACCESS_READ) as m:
        print(m.read(10))
        print(m.read(10))
        print(m[:-10])

运行之后,效果如下:

这里读写会根据文件指针进行移动,比如开始读10个字符,那么第2次读就会接着11个字符开始在读,不会返回起点,而通过切片或者seek()函数可以将指针重置。

至于access参数,表示以什么方式访问,这里以读的方式。

需要特别注意的是,windows不支持创建长度为0的映射。

write(写文件)

写文件比较简单,这里我们直接看一段代码:

import mmap

word = b'The'

with open('英文文档.txt', 'r+') as f:
    with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_WRITE) as m:
        loc = m.find(word)
        m[loc:loc + len(word)] = b'lyj'
        print(m.read())

运行之后,首字母The,就被我们替换成"lyj"了,效果如下:

当然,这里除了切片写入之外,也可以使用write()等文件操作方法进行操作,与文件操作一样。需要注意的是假如access等于ACCESS_COPY,那么不会把修改的内容写入磁盘上的文件。

标签:文件,映射,Python,mmap,access,内存,print
From: https://www.cnblogs.com/arena/p/17719046.html

相关文章

  • python07
    2.字符串格式化字符串格式化,使用更便捷的形式实现字符串的拼接。2.1%2.1.1基本格式化操作name="张云嘉"age=18text="我叫%s,今年%s岁"%("张云嘉",18)text="我叫%s,今年%s岁"%(name,age)text="我叫%s,今年%d岁"%(name,age)text="我叫%(name)s,今年%d岁"......
  • Python
    扫雷importrandom#游戏设置board_size=10#游戏板尺寸num_mines=10#地雷数量#创建游戏板board=[[''for_inrange(board_size)]for_inrange(board_size)]mines=set()#随机布置地雷whilelen(mines)<num_mines:x=random.randint(0,boa......
  • Python-day13
    复习:字符串#字符串生成#字符串对齐#大小写变换#字符串劈分#字符串判断相关方法#字符串替换与合并#字符串比较#字符串切片#格式化字符串#字符串编码解码#字符串查询s1='abc's2="a"+'b'+'c's3=''.join({'a','b','c'})s4=''.join(('a�......
  • Python
    循环结构根据条件或指定次数反复执行某个动作(语句)whilewhile条件: 满足条件执行的语句 break#终止循环else: 不满足条件执行的语句whileTrue: 语句段例:"""使用下列代码循环,直到录入"exit"后退出在控制台中获取一个季度,打印相应的月份输入与输出:春1月2月3月......
  • Python从入门到实战-Scrapy源码2-核心组件
    Scrapy核心组件本篇文章解决:Scrapy有哪些核心组件?以及它们主要负责了哪些工作?这些组件为了完成这些功能,内部又是如何实现的?爬虫类上次讲到Scrapy运行起来后,执行到最后到了Crawler的crawl方法,我们来看这个方法:@defer.inlineCallbacksdefcrawl(self,*args,**kwargs)......
  • # yyds干货盘点 # 系统提取的部分数据存在异常,Python填充有其他更简单的方法么?
    大家好,我是皮皮。一、前言前几天在Python最强王者群【wen】问了一个Python自动化办公的问题,一起来看看吧。请教问题:友信平台因为系统提取的部分数据存在异常,导出的数据经常缺失客户名,但是客户账号是准确的,如果实现客户名自动填充?解决思路:1单独生成客户账号和客户名的表格,两个表格进......
  • Python(Web时代)- 超简单:一行代码就能搭建网站
    From: https://mp.weixin.qq.com/s/x2dJshrAdev4FweK4kwCyA-----------------------------------------------------------------------------------介绍Streamlit是一款非常强大,可以实现快速创建和共享数据应用的Python库。借助他,我们可以在数分钟内构建出功能齐全的Web应用......
  • Python中TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化
    原文链接:http://tecdat.cn/?p=23689最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。本文探索Python中的长短期记忆(LSTM)网络,以及如何使用它们来进行股市预测 ( 点击文末“阅读原文”获取完整代码数据)。在本文中,你将看到如何使用一个被称为长短时记忆的时间......
  • 10个最佳 python 装饰器
    From: https://mp.weixin.qq.com/s/3-1TikeOeLZilHnPzM9I-Q---------------------------------------------------------------------------------装饰器是可以为你的函数添加新功能的秘密武器,使你的代码更加优雅和高效。今天我们将探讨可以增强你的函数的10个最佳Python装......
  • Python语法(3)
    Python语法(3)今天我们来学习列表列表是一种常见的变量类型,可以存储一列元素,在python中元素的类型可以是不同的,不过大多数情况下应该都是相同的。列表的初始化1.直接初始化a=[]#定义一个空列表b=[1,2]#定义一个含有两个整数的列表c=[1,"python",1.23]#定义一个含有......