我正在处理几个大的txt文件,每个文件大约有8000000行.这些行的一个简短例子是:usedfor zipper fasten_coatusedfor zipper fasten_jacketusedfor zipper fasten_pantusedfor your_foot walkatlocation camera cu...

我正在处理几个大的txt文件,每个文件大约有8000000行.这些行的一个简短例子是:
usedfor zipper fasten_coat
usedfor zipper fasten_jacket
usedfor zipper fasten_pant
usedfor your_foot walk
atlocation camera cupboard
atlocation camera drawer
atlocation camera house
relatedto more plenty
将它们存储在字典中的代码是:
dicCSK = collections.defaultdict(list)
for line in finCSK:
line=line.strip('\n')
try:
r, c1, c2 = line.split(" ")
except ValueError:
print line
dicCSK[c1].append(r+" "+c2)
它在第一个txt文件中运行良好,但是当它运行到第二个txt文件时,我得到一个错误MemoryError.
我使用的是带有python 2.7 32bit,intel i5 cpu,8Gb内存的7位64位窗口.我该如何解决这个问题?
进一步解释:
我有四个大文件,每个文件包含许多实体的不同信息.例如,我想查找cat,其父节点动物及其子节点波斯猫等的所有信息.所以我的程序首先读取字典中的所有txt文件,然后我扫描所有字典以查找cat及其父亲及其子节点的信息.
解决方法:
最简单的解决方案:您可能已经耗尽虚拟地址空间(任何其他形式的错误通常意味着在您最终获得MemoryError之前很长一段时间内运行速度非常慢).这是因为Windows(和大多数操作系统)上的32位应用程序仅限于2 GB的用户模式地址空间(Windows可以调整为3 GB,但这仍然是一个低上限).你有8 GB的RAM,但你的程序不能使用(至少)3/4. Python有相当数量的每个对象开销(对象头,分配对齐等),可能是单独的字符串使用接近GB的RAM,并且在你处理字典的开销之前,其余的您的程序,Python的其余部分等.如果内存空间足够碎片,并且字典需要增长,则可能没有足够的连续空间来重新分配,并且您将获得MemoryError.
安装64位版本的Python(如果可以,我建议出于其他原因升级到Python 3);它将使用更多的内存,但是,它将可以访问更多的内存空间(以及更多的物理RAM).
如果这还不够,可以考虑转换为sqlite3数据库(或其他一些数据库),因此当数据对于主内存来说太大时它会自然溢出到磁盘,同时仍然具有相当高效的查找效果.
本文标题为:如何解决Python中的内存错误


基础教程推荐
- 无法使用Chrome和Firefox在Linux Mint上运行Selenium Python脚本 2023-11-11
- windows环境Python调用opencv出错的问题记录 2023-09-03
- python – 在Gunicorn / Flask应用程序中的进程之间共享静态全局数据 2023-11-15
- Python pymysql向SQL语句中传参的多种方法 2023-08-04
- python-将代码包装在函数中是否可以获得内存效率? 2023-11-10
- windows下面使用多版本Python安装指定版本的虚拟环境 2023-09-04
- 【已解决】Python中json.loads出错:ValueError: Expecting , delimiter: line 1 column 86 (char 86) – 在路上 2023-09-04
- 如何利用python turtle绘图自定义画布背景颜色 2023-08-04
- Python实现图片与视频互转代码实战(亲测有效) 2023-08-11
- 【python测试开发栈】python内存管理机制(一)—引用计数 2023-11-12