我在读取CSV文件时出现了这个错误,有什么解决方案可以修复它吗? 我想从CSV文件得到电子邮件,但我得到这个错误一次又一次! 这是错误:
Traceback (most recent call last):
File "email-extractor.py", line 7, in <module>
content = f.read()
MemoryError
这是我的Python代码:
import re
fileInput = 'owner-emails.csv'
fileOutput = 'email-gen-'+fileInput+'.txt'
f = open(fileInput,encoding='utf-8')
content = f.read()
# email regex
regex = re.compile(("([a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`"
"{|}~-]+)*(@|\sat\s)(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(\.|"
"\sdot\s))+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)"))
# set makes them unique
results = set(regex.findall(content))
emails = ""
count = len(results)
for x in results:
emails += str(x[0])+"\n"
# function to write file
def writefile():
f = open(fileOutput, 'w')
f.write(emails)
f.close()
print("File written: " + fileOutput)
writefile()
这是我的CSV文件: 在这里输入图像描述 问题来源StackOverflow 地址:/questions/59466499/how-to-fix-memoryerror-while-reading-a-csv-file
我在虚拟机中运行时也遇到了这个问题,或者其他内存非常有限的问题。这与pandas、numpy或CSV无关,但如果你尝试使用更多的内存,即使是在python身上,也是如此。
你唯一的机会就是你已经尝试过的东西,试着把大的东西咬成小块,放进记忆里。
如果你曾经问自己MapReduce是关于什么的,你自己就会发现...MapReduce会尝试在许多机器上分配块,你会尝试在一台机器上一个接一个地处理块。
通过连接块文件所发现的可能确实是一个问题,也许在这个操作中需要一些副本...但最终这可能会在当前情况下拯救您,但是如果CSV变得稍微大一点,您可能会再次碰到那堵墙……。。。
也可能是,pandas是如此的聪明,如果你用它来做一些事情,比如连接到一个大的df,它实际上只会将单个数据块加载到内存中?
有几件事你可以尝试:
不要一次加载所有数据,而是分割成几个部分 据我所知,hdf 5能够自动完成这些块,并且只加载程序当前工作的部分。 如果类型是确定的,字符串“0.111111”比浮点数需要更多的内存。 你到底需要什么,如果有一个字符串,你可能不需要它来进行数值分析... 数据库只能帮助访问和加载实际需要的部件(例如,只有1%活跃用户)。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。