在python中将列表存储到数组中

时间:2017-08-26 20:47:45

标签: python csv

我是python的新手并尝试拆分列表并存储为数组。

我有一个csv文件,我正在阅读并将每一行存储为列表。这些行中的每一行都用逗号分隔,我想将每个值存储到数组

这是我当前检索csv文件中的行的代码。我一直试图解析每一行以存储到一个数组

def read_csv(self):
    csvFileArray=[]
    with open('myfile.csv','rb') as csvfile:
        bufferreader=csv.reader(csvfile,delimiter=',')
        for row in bufferreader:
            csvFileArray.append(row)
    return csvFileArray

print(csvFileArray[0])的输出为['11043299,1,2,1,true']。现在我希望这个输出可以作为数组轻松访问以进行进一步的计算。例如 - 我应该在true

时打印print(newArray[4])

3 个答案:

答案 0 :(得分:0)

我认为您的方法可以写成:

def read_csv(self):
        return list(open('myfile.csv'))

def read_csv(self):
        with open('myfile.csv') as f:
            return list(f)

如果您需要尽快关闭文件描述符,因为等待Python GC会影响您的性能。请参阅我对此的评论。

要将逗号分隔值的字符串转换为值列表,请执行以下操作:

comma_separeted.split(',')

可以帮助您了解Python标准库提供的内容here

答案 1 :(得分:0)

  

print(csvFileArray [0])的输出将是[' 11043299,1,2,1,true']。

我不这么认为;这是一个字符串的列表,而不是五个元素。例如。

$ echo '11043299,1,2,1,true' >> myfile.csv
In [1]: import csv

In [2]: with open('myfile.csv') as f:
   ...:     reader = csv.reader(f)
   ...:     rows = [row for row in reader]
   ...:

In [3]: rows
Out[3]: [['11043299', '1', '2', '1', 'true']]

这是你想要做的吗?

In [4]: rows[0][4]
Out[4]: 'true'

答案 2 :(得分:0)

查看CSV模块。 csv.DictReader类将CSV文件行放入字典中,标题行字段作为字典键。但是,请注意CSV模块将数据作为字符串读取,因此您可能需要进行某种类型转换。

import csv

with open('favorite_color.csv', 'rb') as csvfile:
    reader = csv.DictReader(csvfile)
    data = {}
    for row in reader:
        for field, value in row.iteritems():
            if not field in data:
                data[field] = [value]
            else:
                data[field].append(value)
data['correct_answers'] = [int(val) for val in data['correct_answers']]
boolval = {'true': True, 'false': False}
data['cross_bridge'] = [boolval[val.lower()] for val in data['cross_bridge']

将CSV的内容很好地放入字典中。

In [2]: data
{'correct_answers': [0, 3, 3, 2],
 'cross_bridge': [False, True, True, False],
 'favorite_color': ['orange', 'green', 'blue', 'yellow'],
 'first_name': ['Dirk', 'King', 'Lancelot', 'Sir'],
 'last_name': ['Diggler', 'Arthur', 'du Lac', 'Galahad']}
In [3]: data['cross_bridge'][0]
Out[3]: False

或者,如果您确实希望每一行都是一个列表,则可以改为使用csv.reader():

import csv

with open('favorite_color.csv') as csvfile:
    reader = csv.reader(csvfile)
    data = []
    for row in reader:
        data.append(row)

其中列出了列表:

In [5]: data
Out[5]: 
[['first_name',
  'last_name',
  'favorite_color',
  'correct_answers',
  'cross_bridge'],
 ['Dirk', 'Diggler', 'orange', '0', 'False'],
 ['King', 'Arthur', 'green', '3', 'True'],
 ['Lancelot', 'du Lac', 'blue', '3', 'True'],
 ['Sir', 'Galahad', 'yellow', '2', 'False']]

以下是CSV模块的文档:

https://docs.python.org/3.5/library/csv.html#csv.reader

您在提问时提到array。我不确定你真正想要的是什么。 Python数组必须包含相同的数据类型。给出的例子没有。这是Python数组的文档:

https://docs.python.org/2/library/array.html

希望有所帮助!