【问题标题】:For loop generating MemoryErrorFor 循环产生 MemoryError
【发布时间】:2017-10-05 17:08:04
【问题描述】:
with open(files, "rb") as f:
    reader = csv.reader(f, delimiter=",")
    totalTweets = 0
    for i, line in enumerate(reader):
        totalTweets += 1
        hashtagsArr = re.findall(r"#(\w+)", line[2])
        for eachHashtag in hashtagsArr:
            hashtagsArr.append(eachHashtag)

为什么 for 循环会为大型 csv 文件生成内存错误?我只是在迭代一个大的 csv 文件。

【问题讨论】:

  • 您正在将新的主题标签附加到您正在迭代的同一主题标签列表中。对我来说,这听起来像是一个永无止境的循环:for eachHashtag in hashtagsArr: hashtagsArr.append(eachHashtag) 可能永远不会终止。

标签: python csv for-loop out-of-memory


【解决方案1】:

查看最后一个循环:

for eachHashtag in hashtagsArr:
    hashtagsArr.append(eachHashtag)

hashtagsArr 每次迭代都会在一个元素上增长,所以这个循环永远不会正确中断。当数组变得太大而无法存储在内存中时,会引发 MemoryError。

否则,您的代码看起来不错,请惰性迭代枚举,因此它不会在第一次调用时将所有文件内容读入内存。

如果您需要将所有主题标签保存到一个列表中,您可以修改您的代码,如下所示:

hashtags=[]
with open(files, "rb") as f:
    reader = csv.reader(f, delimiter=",")
    totalTweets = 0
    for i, line in enumerate(reader):
        totalTweets += 1
        hashtagsArr = re.findall(r"#(\w+)", line[2])
        hashtags += hashtagsArr

【讨论】:

    【解决方案2】:
    for eachHashtag in hashtagsArr: 
        hashtagsArr.append(eachHashtag)
    

    这相当于对我篮子里的每个鸡蛋说,把那个鸡蛋加到篮子里。这是一个永远不会终止的循环,因为您将鸡蛋添加到篮子中的速度与您拿走它们的速度相同。您需要创建一个新变量来包含主题标签数据,您可以将其称为“newHashtagArr”,但这没关系。

    newHashtagArr = []
    for eachHashtag in hashtagsArr:
        newHashtagArr.append(eachHashtag)
    

    【讨论】:

      【解决方案3】:

      你正确的修改代码

      newhashtagarr=[]
      with open(files, "rb") as f:
          reader = csv.reader(f, delimiter=",")
          totalTweets = 0
          for i, line in enumerate(reader):
              totalTweets += 1
              hashtagsArr = re.findall(r"#(\w+)", line[2])
              for eachHashtag in hashtagsArr:
                  newhashtagarr.append(eachHashtag)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-18
        • 2013-06-05
        • 2013-09-13
        相关资源
        最近更新 更多