2017-08-26 64 views
-1

我是python的新手,試圖拆分列表並將其存儲爲數組。將列表存儲到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])

+1

這裏沒有數組。僅列出 –

+0

解析CSV文件的方式有問題。你確定它是用逗號分隔的嗎?請包含myfile.csv的第一行和匹配的'print(csvFileArray [0])'。 – DyZ

+2

'csv.reader()'應該已經將它分解成一個列表。 – AChampion

回答

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會影響你的性能。看到我的評論。

爲逗號分隔值的字符串轉換爲值的列表只是做:你看看什麼Python標準庫所提供的here

+1

'list(open('myfile.csv'))'壞,因爲它不使用'with'來訪問文件。 – DyZ

+0

@DYZ不需要。如果你不喜歡Python GC決定去做它的工作,或者當你不得不擔心打開的文件在需要的時候耗費資源的時間太長。在大多數情況下,源代碼簡單性和性能影響很小,這是一種折衷。我選擇這裏是爲了簡單。不過,感謝您的評論,我會豐富我的回答。 –

0

comma_separeted.split(',') 

可能是有用的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' 
+0

如果CSV文件有如下內容 - 1501043799,1,2,1,真正 1501044312,3,3,2,假 那麼你csvFileArray的輸出[0]會是什麼,我提到 @ cricket_007 – Firstname

+0

不,它不會...繼續看看'['11043299,1,2,1,true']!= ['11043299','1','2','1','true ']'用Python告訴你 –

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。閱讀()代替:

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

希望幫助!