Python 用于循环生成MemoryError
为什么for循环为大型csv文件生成内存错误?我只是在迭代一个大的csv文件。查看最后一个循环: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
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)
可能永远不会终止。