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文件。
答案 0 :(得分:2)
看看最后一个循环:
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
答案 1 :(得分:1)
<span ng-repeat="id in movie.genre_ids">
{{movie.genre[d]}}
</span>
这相当于对我篮子里的每个鸡蛋都说,把鸡蛋加到篮子里。这是一个永远不会终止的循环,因为你将鸡蛋加到篮子上的速度与你拿走它们的速度相同。您需要创建一个新变量来包含hashtag数据,您可以将其称为“newHashtagArr”,但这并不重要。
for eachHashtag in hashtagsArr:
hashtagsArr.append(eachHashtag)
答案 2 :(得分:0)
您正确的修改后的代码
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)