2017-06-22 29 views
1

タイトルとして、Pythonを使用してデリミタ '、'を使用してCSVファイルに2D配列を書きたいと考えています。私の配列は、この(ndarray)のようになります。デリミタを使用してCSVファイルに2次元配列を書き込む

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) 

は私がこれを行う方法を知っているかもしれない、私の出力がされる希望しますか?

私は解決策を試しましたが、私の '行'に 's'を置き忘れてしまい、行内に複数の行を書くことができませんでした。

+1

何を試しましたか?何が効いていないのですか?あなたは "python csv"をgoogledしましたか?そしてそこに現れる標準モジュールのドキュメントを読んでください。 – Anthon

+0

@AnoopToffy前に言及したソリューションを試してみましたが、2D配列を1行に書き込んでいます。そして、私は私の行の中に「s」を置き忘れたことが分かりました。質問を編集します。 – JefferyLR

答えて

4

csvモジュールを使用すると、import csvでも、writerow()またはwriterows()のいずれかが必要になる場合があります。

相違点は何ですか?

のwriterowは、細胞の反復可能な書き込みに要する:

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

writerowsを書き込むために、細胞のイテレート可能オブジェクトの反復可能かかり:勿論変数として与えられることができる

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

。Like

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

結論writerowは1次元データ(1行)をとり、writerowは2次元データ(複数行)をとります。

あなたのためのプログラム:

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

ええ、これはうまく動作します。私は質問を投稿する前にこれを試してみました。そして、私は配列が配列で1行に書き込まれるようにしています。間にありがとう。 – JefferyLR

3

以下のように、

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

あなたはファイルオブジェクトを作成し、ファイルに印刷することができ、numpyの配列であると仮定すると。

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モジュールのドキュメントを読むことができます。

EDIT:変更されたwriteRowもwriterowsもwbとw +を削除しました。間違いを指摘してくれてありがとう@s_vishnu。

+0

コードを確認してください。現在のフォームでは機能しません。 – chthonicdaemon

関連する問題