For循环产生MemoryError
For loop generating MemoryError
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)
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
你正确的修改代码
</p>
<pre><code>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)
for eachHashtag in hashtagsArr:
hashtagsArr.append(eachHashtag)
这相当于对我篮子里的每一个鸡蛋说,把那个鸡蛋加到篮子里。这是一个永远不会终止的循环,因为您将鸡蛋放入篮子的速度与取走它们的速度相同。您需要创建一个新变量来包含主题标签数据,您可以将其命名为 "newHashtagArr" 但没关系。
newHashtagArr = []
for eachHashtag in hashtagsArr:
newHashtagArr.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)
为什么 for 循环会为大型 csv 文件生成内存错误?我只是在迭代一个大的 csv 文件。
看最后一个循环:
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
你正确的修改代码
</p>
<pre><code>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)
for eachHashtag in hashtagsArr:
hashtagsArr.append(eachHashtag)
这相当于对我篮子里的每一个鸡蛋说,把那个鸡蛋加到篮子里。这是一个永远不会终止的循环,因为您将鸡蛋放入篮子的速度与取走它们的速度相同。您需要创建一个新变量来包含主题标签数据,您可以将其命名为 "newHashtagArr" 但没关系。
newHashtagArr = []
for eachHashtag in hashtagsArr:
newHashtagArr.append(eachHashtag)