it-swarm.com.de

Schreiben Sie ein 2D-Array in eine CSV-Datei mit Trennzeichen

Wie der Titel sagt, möchte ich ein 2D-Array in eine CSV-Datei schreiben, wobei Trennzeichen ',' mit Python verwendet werden. Mein Array sieht so aus (ndarray):

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

und ich möchte, dass die Ausgabe so aussieht: 

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)

Wie mache ich das?

Ich habe die Lösung bereits ausprobiert, aber sie funktioniert nicht, da ich ein 's' in meiner 'Zeile' falsch platziert habe. Dadurch wird mein Array in eine einzige Zeile geschrieben und nicht in mehrere Zeilen.

5
JefferyLR

Verwenden Sie das Modul csv durch import csv. Notieren Sie auch, dass Sie entweder writerow() oder writerows() benötigen.

Was ist der Unterschied, den Sie fragen könnten?

writerow benötigt eine Iteration von Zellen zum Schreiben:

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

writerows benötigt eine iterierbare Anzahl von iterierbaren Zellen:

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

Was natürlich als Variable angegeben werden kann. Mögen

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

Fazit writerow nimmt 1-dimensionale Daten (eine Zeile) und writerows 2-dimensionale Daten (mehrere Zeilen).

Programm für Sie:

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)

Hinweis open() verwendet hier zwei Argumente, die zu schreibende Datei und den Modus.

Was ist ein Modus, den Sie fragen können?

Es gibt an, wie die Datei geöffnet werden soll. In meinem Fall bedeutet w+ eine geöffnete Datei my_file.csv, falls diese existiert, falls dies nicht der Fall ist. Erstellen Sie dann eine neue und schreiben Sie.

Es stehen mehrere Modi zur Auswahl. Hinweis: w+ wird bei jeder Verwendung überschrieben. Das heißt, alte Daten in der Datei werden überschrieben. Wenn Sie also nur die Variable a anhängen möchten, verwenden Sie diese. Sehen Sie sich dies an, um weitere Informationen zu den Modi zu erhalten . Dateimodi

11
void

Das in csv eingebaute Python-Modul macht dies einfach:

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)
3
moritzg

Angenommen, a ist ein numpy-Array,

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

Ein einfacher Weg, dies zu erreichen, ist wie folgt.

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()

Eine andere Alternative:

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()

Edit : Bitte beachten Sie, dass die Verwendung des Moduls csv zum Schreiben in CSV-Dateien immer bevorzugt wird. Die Lösung, die ich vorgeschlagen habe, ist allgemeiner und kann nützlich sein, um Dinge in jedem Format in einem beliebigen Dateityp zu schreiben.

3
Wasi Ahmad

Sie können ein Dateiobjekt erstellen und in eine Datei drucken (siehe unten).

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()
0
voidpro