2016-06-23 160 views
-1

我正在循環訪問2d數組(數據),然後使用我正在循環的數組的不同段來填充字段。下面是示例代碼:將數組寫入csv

with open('output.csv' , 'wb') as outcsv: 
    headers = ['Field1', 'Field2', 'LongField'] 
    writer = csv.DictWriter(outcsv, headers) 
    writer.writeheader() 
    for i in range(numArrays): 
     row = [{'Field1': data[i][:3], 
       'Field2': data[i][3:5], 
       'LongField': data[i][5:]}] 
     writer.writerows(row) 

我正在爲所有領域所需要的輸出除了「LongField」,其中值的數量較大(數百,可能甚至幾千)和變化。 這裏是我的輸出是什麼樣子:

Field1 Field2 LongField 
3,4,5 1,2 array([0,0,0,...,0,0,0]) 
5,3,6 0,9 array([0,0,0,...,0,0,0]) 

這是發生由於IM超過某種最大的允許值,我可以寫一個細胞?有沒有辦法讓我將所有實際值寫入單元格?

任何幫助將不勝感激!

+0

,因爲你沒有結束指數也許它需要的陣列和輸出它像一個剩餘陣列。嘗試把'len(data [i])'如下所示:'[5:len(data [i])]' – deltashade

+0

什麼是樣本'data'?你想要LongField列中的數據是什麼?您如何期望將許多值顯示在單個csv列中? – martineau

+0

@deltashade我已經嘗試過,但結果相同.. – user32147

回答

1

我懷疑OP希望所有這些都打印出來,不管有多少。沒有array(也不)並沒有省略號...

猜測:

嘗試','.join([str(_) for _ in data[i][5:]])

在全:

row = [{'Field1': data[i][:3], 'Field2': data[i][3:5], 'LongField': ','.join([str(_) for _ in data[i][5:]])}] 

Related to this answer.

幫助我們:

您使用的是什麼樣的陣列?你能告訴我們更多的代碼嗎?或者告訴輸出:type(data[0])

編輯

OP澄清什麼類型的數組,並有多長:

這是一個numpy.array(該ndarray或一個維度;同時STR處理)

它是2,984長。

顯然的numpy.array一個STR版本將截斷所有但第一3個最後3元素時,所述陣列具有1000個元素或多個

999元素:

str(numpy.array(range(1000))) 
>>[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 
>> 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 
>> 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 
>> 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 
>> 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 
>> 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 
etc... 

1000個元素:

str(numpy.array(range(1001))) 
>>'[ 0 1 2 ..., 998 999 1000]' 

所以我認爲我的原始建議應該工作,迫使它到你想要的字符串表示。我認爲CSV DictWriter應該照顧報價。

','.join([str(_) for _ in numpy.array(range(2987))]) 

編輯

解釋我的回答:

所以,你不給DictWriter一個字符串 - 它必須推斷的字符串。我假設DictWriter將使用Python str函數。如文檔所述,str函數將:

返回一個字符串,其中包含對象的良好可打印表示形式。

我想numpy開發商認爲,隨着> 999種元素的array很「打印」

所以1000上面,他們可能有__str__函數返回一個「總結」的版本,這隻能說明前3個元素和後3個元素。

而不是讓DictWriter或str給你一個字符串,你可以創建你想要的字符串。我相信你想要的字符串就是所有用逗號分隔的數組的元素,這是該代碼的功能:

','.join([str(_) for _ in [1,2,3]]) 
  • ','.join()將「串聯」上一個逗號的所有元素;元素必須是字符串
  • [str(_) for _ in [1,2,3]]將轉換爲字符串的各個元素(需要加入工作)
+0

對不起,我感到困惑。這裏是類型(data [0])的輸出: user32147

+0

這裏是數據的輸出:>>> data array([[0.,1.,0.,... ,0.,0,0。,],[0.,1,0。,...,0.,0,0。,],...,]]) – user32147

+0

>>> len(數據[0])2984 – user32147