請問 mmap 的使用問題
时间:2011-06-19
来源:互联网
我想用 mmap 來讀取一個很大 (幾G)的文本文件, 文件中的格式是每行有五個數字 (是文本不是二進位資料), 我原來用文本讀取命令來讀取行的
复制代码
但這樣效率很低. 後來改用 mmap
复制代码
但這樣有兩個問題
1) 不能再用 for linenum, line in enumerate(myfile): 來列舉所有行了, 試過改為 for linenum, line in enumerate(m): 也不行
2) 讀出來的行很奇怪, 開頭有 b' 結尾是 \r\n. 例如, b' 4 5 1 6 8 \r\n' 為甚麼會多了個 b' 而尾端又多了 \r\n, 怎樣才能讀出那幾個數字?
3) 由於 1) 實現不了, 請問怎樣才能一行一行讀進來直到個文件讀完為止?
謝謝
- self.file = open("data.txt, "r")
- for linenum, line in enumerate(myfile):
- temp = line.split()
- ...
- import mmap
- import contextlib
-
- with open('data.txt', 'r') as f:
- with contextlib.closing(mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)) as m:
- m.seek(0)
- print(m.readline())
1) 不能再用 for linenum, line in enumerate(myfile): 來列舉所有行了, 試過改為 for linenum, line in enumerate(m): 也不行
2) 讀出來的行很奇怪, 開頭有 b' 結尾是 \r\n. 例如, b' 4 5 1 6 8 \r\n' 為甚麼會多了個 b' 而尾端又多了 \r\n, 怎樣才能讀出那幾個數字?
3) 由於 1) 實現不了, 請問怎樣才能一行一行讀進來直到個文件讀完為止?
謝謝
作者: KFC_123 发布时间: 2011-06-19
本帖最后由 106033177 于 2011-06-19 20:59 编辑
回复 KFC_123
你自己记一下数不行吗?
复制代码
回复 KFC_123
你自己记一下数不行吗?
-
- with open('data.txt', 'r') as f:
- m=mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
- linenum=0
- line=m.readline()
- while line:
- linenum+=1
- line=m.readline()
作者: 106033177 发布时间: 2011-06-19
回复 KFC_123
全部映射到内存跟直接打开迭代效率有差别吗?
全部映射到内存跟直接打开迭代效率有差别吗?
作者: 106033177 发布时间: 2011-06-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28