Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于循环生成MemoryError_Python_Csv_For Loop_Out Of Memory - Fatal编程技术网

Python 用于循环生成MemoryError

Python 用于循环生成MemoryError,python,csv,for-loop,out-of-memory,Python,Csv,For Loop,Out Of Memory,为什么for循环为大型csv文件生成内存错误?我只是在迭代一个大的csv文件。查看最后一个循环: 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+)", lin

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

查看最后一个循环:

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

否则,您的代码看起来很好,enumerate会延迟迭代,这样它就不会在第一次调用时将所有文件内容读入内存

如果需要将所有hashtag保存到一个列表中,可以修改代码,如下所示:

for eachHashtag in hashtagsArr:
    hashtagsArr.append(eachHashtag)
请看最后一个循环:

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

否则,您的代码看起来很好,enumerate会延迟迭代,这样它就不会在第一次调用时将所有文件内容读入内存

如果需要将所有hashtag保存到一个列表中,可以修改代码,如下所示:

for eachHashtag in hashtagsArr:
    hashtagsArr.append(eachHashtag)
正确的修改代码

正确修改的代码
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)

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)
这相当于对我篮子里的每一个鸡蛋说,把那个鸡蛋加到篮子里。这是一个永远不会终止的循环,因为你将鸡蛋添加到篮子中的速度与你将鸡蛋取出的速度相同。您需要创建一个新变量来包含hashtag数据,您可以将其称为“newHashtagArr”,但这并不重要

for eachHashtag in hashtagsArr: 
    hashtagsArr.append(eachHashtag)
这相当于对我篮子里的每一个鸡蛋说,把那个鸡蛋加到篮子里。这是一个永远不会终止的循环,因为你将鸡蛋添加到篮子中的速度与你将鸡蛋取出的速度相同。您需要创建一个新变量来包含hashtag数据,您可以将其称为“newHashtagArr”,但这并不重要

for eachHashtag in hashtagsArr: 
    hashtagsArr.append(eachHashtag)

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