Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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
试图将.csv文件加载到几个不同的数组中,但python给了我一个';内存不足';错误_Python_Out Of Memory_Jython - Fatal编程技术网

试图将.csv文件加载到几个不同的数组中,但python给了我一个';内存不足';错误

试图将.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

我正在尝试将.csv文件读入7个不同的数组

第一个数组用于列的名称,并将csv文件的前6个值作为列名

在数组中记录了这6个名称之后,它(应该)转换为读取csv文件的行,并将每列的值存储在自己的数组中,即名为names的列有自己的数组,以此类推

当我试图运行此代码时,它会给我一个“内存不足”错误。现在.csv文件非常小(1kb),这样的文件肯定不会给我这个错误(运行16GB的2333mhz RAM)

代码:

 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))