试图将.csv文件加载到几个不同的数组中,但python给了我一个';内存不足';错误
我正在尝试将.csv文件读入7个不同的数组 第一个数组用于列的名称,并将csv文件的前6个值作为列名 在数组中记录了这6个名称之后,它(应该)转换为读取csv文件的行,并将每列的值存储在自己的数组中,即名为names的列有自己的数组,以此类推 当我试图运行此代码时,它会给我一个“内存不足”错误。现在.csv文件非常小(1kb),这样的文件肯定不会给我这个错误(运行16GB的2333mhz RAM) 代码:试图将.csv文件加载到几个不同的数组中,但python给了我一个';内存不足';错误,python,out-of-memory,jython,Python,Out Of Memory,Jython,我正在尝试将.csv文件读入7个不同的数组 第一个数组用于列的名称,并将csv文件的前6个值作为列名 在数组中记录了这6个名称之后,它(应该)转换为读取csv文件的行,并将每列的值存储在自己的数组中,即名为names的列有自己的数组,以此类推 当我试图运行此代码时,它会给我一个“内存不足”错误。现在.csv文件非常小(1kb),这样的文件肯定不会给我这个错误(运行16GB的2333mhz RAM) 代码: for line in data: i = 0 counter = 0 # Split
for line in data:
i = 0
counter = 0
# Split the line into its six values
seven = line.split(",")
# And append them (converted if necessary) to their arrays
while i < 6:
array1.append(seven[counter])
i + 1
counter + 1
counter = 0
i = 0
while i < 60:
array2.append(seven[counter])
i + 1
array3.append(float(seven[counter]))
i + 1
array4.append(float(seven[counter]))
i + 1
array5.append(float(seven[counter]))
i + 1
array6.append(float(seven[counter]))
i + 1
array7.append(float(seven[counter]))
i + 1
counter + 1
# And close the file
data.close
我的IDE给出的错误如下
“发生错误java.lang.OutOfMemoryError”
Python有一个方便的模块,可以让您更轻松地完成这一切。我建议使用DictReader
类,它会自动计算出第一行的字段名,然后返回字典。不要创建七个单独的列表,那只是自找麻烦
import csv
data = []
with open('myfile.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
data.append(row)
# Accessing the 'name' field from row 32:
print data[32]['name']
使用with
语句可以避免手动调用.close()
您可以通过调用列表
构造函数使其更加简洁:
import csv
with open('myfile.csv') as csvfile:
data = list(csv.DictReader(csvfile))
不管这是多么糟糕的代码,您的问题是您没有更新
i
的值,因此存在一个无限循环。您需要执行i+=1
。更好的方法:使用csv
模块。谢谢你,这真的很有帮助,是的,对“糟糕的代码”感到抱歉。我只是在业余时间自学一些有趣的事情啊,非常感谢。我只是在业余时间自学一些有趣的事情。甚至没有意识到有一个csv模块,从现在起将使用它。哈哈。)@samz1112别担心,我们都从某个地方开始!Python试图“包括电池”--通常会有一个库来帮助您处理各种基本(和高级!)内容。通过将for
循环替换为data=list(reader)
,代码甚至会变得更简单。甚至是data=list(csv.DictReader(csvfile))
这样带主体的就变成了一行。@BlackJack是的,我通常会这样做,但我认为对于一个绝对的初学者来说,清晰胜过简洁。不过,在短版本中进行编辑还是个好主意。嗯,这不是一个列表理解,而是一个简单的函数调用。
import csv
with open('myfile.csv') as csvfile:
data = list(csv.DictReader(csvfile))