2017-06-22 150 views
1

作爲標題,我希望的2D陣列寫入用定界符csv文件「」使用python。我的陣列看起來像這樣(ndarray):寫二維數組到csv文件與分隔符

a= [[1,2,3,4],[5,6,7,8]] 

,我希望我的輸出將是,

1,2,3,4 
5,6,7,8 

with open('./data/positive.csv','wb') as myfile: 
    wr = csv.writer(myfile) #, quoting=csv.QUOTE_ALL) 
    wr.writerow(a) 

可我知道如何做到這一點?

只是婉解釋,我已經嘗試瞭解決方案,但dosent工作,因爲我在我的「行」放錯地方的「S」,它使我的數組寫在一條線上,但沒有多行。

+1

你有什麼試過?什麼不起作用?你用google搜索「python csv」嗎?並閱讀顯示在那裏的標準模塊的文檔? – Anthon

+0

@AnoopToffy我已經嘗試過之前提到過的解決方案,但它將2D數組寫入一行。我發現我在我的'行'中放置了's',將編輯這個問題。 – JefferyLR

回答

4

使用csv模塊通過import csv也記下你可能需要或者writerow()writerows()

什麼是你可能會問有什麼區別?

writerow需要細胞可迭代寫:

writerow([1,2,2]) 
-> 
1,2,2 

writerows需要細胞iterables的可迭代寫:

writerows([[1,2,3], 
      [4,5,6], 
      [6,7,8]]) 
-> 
1,2,3 
4,5,6 
6,7,8 

哪些可以ofcourse被給定爲一個變量。Like

a = [[1,2,3],[4,5,6],[6,7,8]] 
writerows(a) 

結束語writerow需要一維數據(一行),而刻錄機需要二維數據(多行)。

計劃爲您提供:

import csv 

a = [[1,2,3,4],[5,6,7,8]] 

with open("new_file.csv","w+") as my_csv: 
    csvWriter = csv.writer(my_csv,delimiter=',') 
    csvWriter.writerows(a) 

注意open()這裏需要兩個參數要寫入的文件和模式。

你可能會問什麼模式?

它指定應該如何打開文件。在我的情況下,w+表示打開文件my_file.csv,如果它不存在,那麼罰款創建一個新的並寫入。

有幾種模式可供選擇。 注意w+每次使用它時都會覆蓋。這是舊文件中的數據將被覆蓋,所以如果你想追加使用a。看看這個更多關於模式的細節。 File modes

+2

非常感謝您提及「行」和「行」。它解決了我的問題。 – JefferyLR

3

Python的內置csv模塊做到這一點很容易:

import csv 

a= [[1,2,3,4],[5,6,7,8]] 

with open("output.csv", "w") as f: 
    writer = csv.writer(f) 
    writer.writerows(a) 
+0

是的,這個工作很好。在我發佈問題之前,我嘗試了這一點,我發現我錯過了行中的's',使整個數組寫入一行。感謝之間。 – JefferyLR

3

假設一個是numpy的陣列,

import numpy 
a= [[1,2,3,4],[5,6,7,8]] 
numpy.savetxt('output.csv',a,delimiter=",") 
0

您可以創建一個文件對象,並打印到文件,如下圖所示。

f=open('file.csv','w') 
a= [[1,2,3,4],[5,6,7,8]] 
for x in a: 
    print(",".join([str(i) for i in x]), file=f) 
f.close() 
3

一個簡單的方法來實現這一點如下。

a= [[1,2,3,4],[5,6,7,8]] 
f = open('file.csv', 'w') 
for item in a: 
    for i in range(len(item)): 
     if i == 0: 
      f.write(str(item[i])) 
     else: 
      f.write(',' + str(item[i])) 
    f.write('\n') 
f.close() 

另一種選擇:

a= [[1,2,3,4],[5,6,7,8]] 
f = open('file.csv', 'w') 
for item in a: 
    f.write(','.join([str(x) for x in item]) + '\n') 
f.close() 

編輯:請注意,使用csv模塊的CSV文件中寫總是首選。我提出的解決方案更通用,可以用任何格式的文件寫入任何格式的文件。

+3

這實際上太過分了,因爲'csv'模塊或多或少地自動完成了所有這些。 – moritzg

+0

@moritzg我同意,我只是建議一個簡單的方法。 –

+0

它只使用基本的文件操作,不需要額外的模塊使用。 –

-1

Python有一個內置的可用於讀取和寫入CSV的CSV模塊。

import csv 
a= [[1,2,3,4],[5,6,7,8]] 
with.open("myFile.csv", "w+") as myCsv: 
    csvWriter = csv.writer(myCsv, delimiter=',') 
    csvWriter.writerows(a) 

您可以使用This鏈接閱讀CSV模塊上的文檔。

編輯:將writeRow更改爲寫入器也刪除了wb和w +。感謝@s_vishnu指出錯誤。

+0

請檢查您的代碼,它目前的格式不起作用。 – chthonicdaemon