- 论坛徽章:
- 0
|
我想用 mmap 來讀取一個很大 (幾G)的文本文件, 文件中的格式是每行有五個數字 (是文本不是二進位資料), 我原來用文本讀取命令來讀取行的
- self.file = open("data.txt, "r")
- for linenum, line in enumerate(myfile):
- temp = line.split()
- ...
复制代码 但這樣效率很低. 後來改用 mmap- 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) 實現不了, 請問怎樣才能一行一行讀進來直到個文件讀完為止?
謝謝 |
|