开发者社区> 问答> 正文

如何修复读取CSV文件时的内存错误?

我在读取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

展开
收起
kun坤 2019-12-25 09:59:56 601 0
1 条回答
写回答
取消 提交回答
  • 我在虚拟机中运行时也遇到了这个问题,或者其他内存非常有限的问题。这与pandas、numpy或CSV无关,但如果你尝试使用更多的内存,即使是在python身上,也是如此。

    你唯一的机会就是你已经尝试过的东西,试着把大的东西咬成小块,放进记忆里。

    如果你曾经问自己MapReduce是关于什么的,你自己就会发现...MapReduce会尝试在许多机器上分配块,你会尝试在一台机器上一个接一个地处理块。

    通过连接块文件所发现的可能确实是一个问题,也许在这个操作中需要一些副本...但最终这可能会在当前情况下拯救您,但是如果CSV变得稍微大一点,您可能会再次碰到那堵墙……。。。

    也可能是,pandas是如此的聪明,如果你用它来做一些事情,比如连接到一个大的df,它实际上只会将单个数据块加载到内存中?

    有几件事你可以尝试:

    不要一次加载所有数据,而是分割成几个部分 据我所知,hdf 5能够自动完成这些块,并且只加载程序当前工作的部分。 如果类型是确定的,字符串“0.111111”比浮点数需要更多的内存。 你到底需要什么,如果有一个字符串,你可能不需要它来进行数值分析... 数据库只能帮助访问和加载实际需要的部件(例如,只有1%活跃用户)。

    2019-12-25 11:19:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
内存取证与IaaS云平台恶意行 为的安全监控 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载
低代码开发师(初级)实战教程 立即下载