Spalten aus csv Datei in arrays

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Antik
User
Beiträge: 16
Registriert: Mittwoch 6. Februar 2019, 07:58

Ich habe eine csv Datei mit zwei Spalten. Ich habe es hinbekommen ein array aus der ersten Spalte zu machen:

with open("DB_csv.csv", "r") as csvfile:
datei = csv.reader(csvfile, delimiter=';')
for row in datei:
array.append(row[0])
print(array)

allerdings bekomme ich es nicht hin ein array mit nur den daten aus der zweiten spalte zu machen. Ich dachte an:

with open(name, "r") as csvfile:
datei = csv.reader(csvfile, delimiter=';')
for row in datei:
array.append(row[1])

print(array)

dies funktioniert leider nicht
Benutzeravatar
sparrow
User
Beiträge: 4237
Registriert: Freitag 17. April 2009, 10:28

Bitte poste deinen Code in Code-Tags (erscheinen wenn man über dem Eingabefeld den </>-Knopf drückt).

Was bedeutet "es funktioniert nicht"?
Fehlemeldung? Erwartetes und tatsächliches Ergebnis? Wie sehen die Ursprungsdaten aus?
Bitte möglichst Rohdaten zeigen und nicht beschreiben, was nicht geht.
Benutzeravatar
__blackjack__
User
Beiträge: 13242
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Antik: Wo kommt `array` her und ist das tatsächlich ein Array? Falls das eine Liste ist, nenn die nicht `array` weil das verwirrend ist, denn es gibt auch Arrays in Python. Üblicherweise sind dann Arraydatentypen aus `numpy` gemeint, es gibt in der Standardbibliothek auch ein `array`-Modul.

`datei` passt als Name auch nicht so ganz zu einem CSV-Reader. `rows` oder `reader` wären besser. Insgesamt sollte man auch vermeiden Deutsch und Englisch zu mischen.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Antik
User
Beiträge: 16
Registriert: Mittwoch 6. Februar 2019, 07:58

sparrow hat geschrieben: Mittwoch 6. Februar 2019, 11:45 Bitte poste deinen Code in Code-Tags (erscheinen wenn man über dem Eingabefeld den </>-Knopf drückt).

Was bedeutet "es funktioniert nicht"?
Fehlemeldung? Erwartetes und tatsächliches Ergebnis? Wie sehen die Ursprungsdaten aus?
Bitte möglichst Rohdaten zeigen und nicht beschreiben, was nicht geht.
Entschuldige bin neu hier und in Python
Ich erstelle eine csv Datei mit folgenden spalten:
in Spalte eins stehen die nummern die von RFID-Tags ausgelesen werden: z.B. e20030987906028116806b7a, e20030987906028116806b7a, e20030987906028116806b7a,
in Spalte zwei steht der Zeitstempel wann diese Tags eingelesen wurden: z.B. 06.02.19 10:59:53, 06.02.19 11:00:33, 06.02.19 11:08:33


Code: Alles auswählen

with open(DB_csv.csv "r") as csvfile:
	datei = csv.reader(csvfile, delimiter=';')
	for row in datei:
	array.append(row[0])

print(array)
Das Ergebniss was im Moment geliefert wird und womit ich auch arbeiten kann ist folgendes:

['RFID-Tag,Zeitstempel', 'e20030987906028116806b7a', 'e20030987906028116806b7a', 'e20030987906028116806b7a']

Ich möchte kontrollieren ob ein RFID Tag bereits in der spalte steht. Das kann ich mit diesem array machen. Als nächstes soll kontrolliert werden, wie lange es her ist das er erstellt wurde. DAfür wollte ich ein zweites array mit den zeiten erstellen. Allerdings gelingt mir das nicht. Die Idee die ich hatte mit:

Code: Alles auswählen

with open(DB_csv.csv "r") as csvfile:
	datei = csv.reader(csvfile, delimiter=';')
	for row in datei:
	array_zeit.append(row[1])

print(array_zeit)
liefert folgenden Fehler: IndexError: list index out of range
Benutzeravatar
sparrow
User
Beiträge: 4237
Registriert: Freitag 17. April 2009, 10:28

Die Einrückung bei den For-Schleifen stimmt nicht. Das sollte gar nicht funktionieren.
Wenn du hier anderen Code zeigst, als du verwendest, dann kann das natürlich dazu führen, dass wir Fehler nicht sehen.

Allgemein solltest du mit 4 Leerzeichen einrücken, statt mit Tabulator oder 8 Leerzeichen.

Zu dem Problem:
Lass dir doch die Werte für row[0] und row[1] während des Durchlaufs anzeigen. Möglicherweise ist eine 2. Spalte leer, dann gibt es den Eintrag in der Liste nicht. Und das führt zu einem IndexError, weil an dem geforderten Index nichts zu finden ist.
Antik
User
Beiträge: 16
Registriert: Mittwoch 6. Februar 2019, 07:58

sparrow hat geschrieben: Mittwoch 6. Februar 2019, 12:33 Die Einrückung bei den For-Schleifen stimmt nicht. Das sollte gar nicht funktionieren.
Wenn du hier anderen Code zeigst, als du verwendest, dann kann das natürlich dazu führen, dass wir Fehler nicht sehen.

Allgemein solltest du mit 4 Leerzeichen einrücken, statt mit Tabulator oder 8 Leerzeichen.

Zu dem Problem:
Lass dir doch die Werte für row[0] und row[1] während des Durchlaufs anzeigen. Möglicherweise ist eine 2. Spalte leer, dann gibt es den Eintrag in der Liste nicht. Und das führt zu einem IndexError, weil an dem geforderten Index nichts zu finden ist.
Also der Fehler bei der Einrückung ist beim übertragen passiert und steht so nicht in meinem Programm. Sry dafür. Es gibt keine lehre Zeile in der zweiten Spalte und auch keine spalte zwischen den beiden angegebenen. Habe auch versucht mir row[0] bzw row[1] anzeigen zu lassen. bei row[0] funktionert wie gehabt bei row[1] sofort gleicher fehler wir vorher.
Benutzeravatar
sparrow
User
Beiträge: 4237
Registriert: Freitag 17. April 2009, 10:28

Na dann zeig mal die ersten Zeilen aus der Datei.
Benutzeravatar
__blackjack__
User
Beiträge: 13242
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Man sieht in den gezeigten Daten schön das Du die Spaltenüberschriften durch ein *Komma* getrennt hast. Den Rest laut gezeigtem Code aber durch *Semikolons*. Mach das einfach einheitlich und schon hast Du bei den Spaltenüberschriften auch tatsächlich eine zweite Spalte.

Letztlich willst Du das aber gar nicht getrennt einlesen, denn Zeitstempel und ID gehören ja jeweils zusammen. Das sollte man nicht auf ”parallele” Listen verteilen, denn zur Bearbeitung muss man die dann ja doch wieder zusammenführen. Die zu trennen führt im nächsten Verarbeitungsschritt dann einfach nur zu mehr, zusätzlicher Arbeit die man sich sparen kann.

Hör auf Listen als Arrays zu bezeichnen! :-)
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
Antik
User
Beiträge: 16
Registriert: Mittwoch 6. Februar 2019, 07:58

__blackjack__ hat geschrieben: Mittwoch 6. Februar 2019, 12:45 Man sieht in den gezeigten Daten schön das Du die Spaltenüberschriften durch ein *Komma* getrennt hast. Den Rest laut gezeigtem Code aber durch *Semikolons*. Mach das einfach einheitlich und schon hast Du bei den Spaltenüberschriften auch tatsächlich eine zweite Spalte.

Letztlich willst Du das aber gar nicht getrennt einlesen, denn Zeitstempel und ID gehören ja jeweils zusammen. Das sollte man nicht auf ”parallele” Listen verteilen, denn zur Bearbeitung muss man die dann ja doch wieder zusammenführen. Die zu trennen führt im nächsten Verarbeitungsschritt dann einfach nur zu mehr, zusätzlicher Arbeit die man sich sparen kann.

Hör auf Listen als Arrays zu bezeichnen! :-)
Vieler dank. Bin nicht ganz sicher was ich Falsch gemacht habe, aber deine Antwort hat mich irgendwie auf den richtigen weg Gebracht :lol:
Antworten