tl; dr答案:不要使用numpy。使用csv.writer
而不是numpy.savetxt
。如何將字符串(包含逗號)的numpy數組保存爲CSV?
我是Python和NumPy的新手。看起來,將二維數組字符串(包含逗號)保存爲CSV文件應該不是那麼困難,但我無法按照自己的想法使其工作。
比方說,我有一個數組,看起來像這樣(從列表的列表中進行):在Excel中
[['text1, text2', 'text3'],
['text4', 'text5']]
我想一個CSV文件看起來像這樣(或沒有引號)(管=電池隔膜):
'text1, text2' | 'text3'
'text4' | 'text5'
我使用numpy.savetxt(filename, array, fmt="%s")
,我得到以下CSV輸出(方括號):
['text1, text2','text3']
['text4','text5']
該款顯示器在Excel這樣的:
['text1 | text2' | 'text3']
['text4' | 'text5']
我試圖與savetxt分隔符參數大驚小怪,但在輸出沒有變化。
我是否需要手動執行此操作?如果是這樣,讓我知道是否有任何我應該知道的捷徑。
最終,我需要將CSV導入到Postgresql數據庫中。我並不完全清楚CSV格式需要如何才能按預期工作,但我假設它在Excel中看起來錯誤,它可能最終會在Postgres中搞砸。 Postgres documentation說:
每個記錄中的值由DELIMITER字符分隔。如果 的值包含分隔符,QUOTE字符,NULL字符串,回車符或換行符,則整個 值的前綴爲後綴QUOTE字符,並且任何發生在值QUOTE字符或ESCAPE 字符前面是轉義字符。在 特定列中輸出非空值時,您還可以使用 FORCE_QUOTE強制引用。
謝謝!
++++++++++++++++++++++++++++
真實的輸入和輸出,在情況下,它貼切不同:
陣列:
[['8908232', 'Plant Growth Chamber Facility at the Department of Botany, University of Wisconsin-Madison', 'DBI', 'INSTRUMENTAT & INSTRUMENT DEVP', '1/1/90', '12/19/89', 'WI', 'Standard Grant', 'Joann P. Roskoski', '12/31/91', '$94,914.00 ', 'BIO', '1108', '', '$0.00 ']]
CSV輸出:
['8908232', 'Plant Growth Chamber Facility at the Department of Botany, University of Wisconsin-Madison', 'DBI', 'INSTRUMENTAT & INSTRUMENT DEVP', '1/1/90', '12/19/89', 'WI', 'Standard Grant', 'Joann P. Roskoski', '12/31/91', '$94,914.00 ', 'BIO', '1108', '', '$0.00 ']
Excel的版本:
['8908232' 'Plant Growth Chamber Facility at the Department of Botany University of Wisconsin-Madison' 'DBI' 'INSTRUMENTAT & INSTRUMENT DEVP' '1/1/90' '12/19/89' 'WI' 'Standard Grant' 'Joann P. Roskoski' '12/31/91' '$94 914.00 ' 'BIO' '1108' '' '$0.00 ']
嗯,這可能是Python擅長的事情之一,而不是_NumPy_的好處之一。 stdlib中的['csv'](http://docs.python.org/3/library/csv.html)模塊用於處理在CSV文件中以CSV的每種合理方言編寫和解析各種字符串。 'np.savetxt'被設計爲處理將數字數組寫入簡單的CSV方言... – abarnert
此外,您不會爲該代碼獲得該輸出。向我們展示您的實際代碼和您的實際輸出,或者我們無法告訴您您確實做錯了什麼。 – abarnert
增加了上面的實際輸出,並進一步闡明瞭這個問題。 Numpy.savetxt被實驗室中的某個人推薦給我,但你說得對,csv.writer更好。 – ems