Pandas 使用mmap加载csv数据(Windows平台)

filePath = os.path.join(dirPath, 'b04001_01.csv')
size = os.path.getsize(filePath)
mm_file = mmap.mmap(-1, size, access = mmap.ACCESS_WRITE, tagname='share_memeory')
cnt = mm_file.read_byte()
if cnt == 0:
    print('A1 load data to memory')
    with open(filePath, 'r+') as f:
    mm_file=mmap.mmap(0, size, access = mmap.ACCESS_WRITE, tagname='share_memeory')
    content = str.encode(''.join(f.readlines()))
    mm_file.write(content)
else:
    print('A1 the data is in memeory')
mm_file.seek(0)
csvData = pd.read_csv(mm_file,dtype={'prop':float})

由于项目这边想通过mmap提升csv加载的速度,所以研究实现了以上代码。
有以下几点我解释一下:

  1. 通过readlines()把文件整个读取后,再转化为byte写到内存中。

  2. 在执行read_csv前需要把文件的位置通过seek(0)回到文件头,不然读出的DataFrame会为空

  3. 通过if-else判断,如果内存此时已有该文件数据,代码不会再次加载文件。

  4. 另外上面代码可以实现进程间的数据共享,也叫进程共享内存。不过加载在内存中的数据什么时候释放无法决定,不太清楚python中内存回收的机制,所以整个代码效果不是太明显。还请看到此文的老师留言交流。

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部