Kommata getrennte Werte von .txt Datei in Array ablegen

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
Stefsn
User
Beiträge: 16
Registriert: Dienstag 8. Oktober 2019, 06:12

Hey Leute,

ich benötige einmal wieder eure Hilfe. :)

Ich habe eine .txt Datei mit Messwerten. Die Messwerte beschreiben Sachen für verschiedene Zustände. Die Datei hat folgenden Aufbau:

13, 15, 45
14, 9, 24
24, 56, 34
12, 34, 36
... usw.

Jede Spalte enthält die Messwerte zu einem Experiment. Also im Beispiel gab es 3 Experimente.

Ich würde die .txt jetzt gerne in einem Array einlesen, sodass die Werte ebenfalls in der Spaltenform bleiben. Angenommen ich habe je Experiment 12 Messwerte, dann möchte ich folgende Funktionalität haben:
  • file = ...
  • choice_of columns = [0] oder [0,1] oder [0,2] oder ...
  • Spalten wurden ausgewählt -> Eingabe der gewünscht Messwerte z.B.: choice_of_rows = [0,1,4,6,11] oder [3:7] oder [0:3,5:7] oder ...
Die Eingabe soll dabei nicht interaktiv sein. Man sollte es einfach in einem Array ablegen können. Hat da jemand eventuell eine Lösung parat oder wurde sowas hier schon mal umgesetzt? Habe nichts finden können-

Danke schon mal. :)
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@Stefsn: zum Lesen von csv-Dateien gibt es im Standardumfang von Python das csv-Modul. Beliebt sind für solche Zahlenmatrizen auch numpy oder pandas, je nachdem was Du noch damit machen willst.
Stefsn
User
Beiträge: 16
Registriert: Dienstag 8. Oktober 2019, 06:12

Danke für die schnelle Antwort. Aber wie bekomme ich es hin, dass ich Spalten und Zeilen Anzahl variabel auswählen kann? Und wie speichere ich das ganze in einem Array ab? Mit Listen hantiere ich recht ungern, weil sich damit nicht sonderlich gut rechnen lässt. :)
Stefsn
User
Beiträge: 16
Registriert: Dienstag 8. Oktober 2019, 06:12

Ah. Ich habe eine Idee. Ich schicke demnächst mal einen Code-Schnipsel. :D
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Hast Du Dich mal mit numpy auseinandergesetzt?
Benutzeravatar
noisefloor
User
Beiträge: 4193
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Und wie speichere ich das ganze in einem Array ab? Mit Listen hantiere ich recht ungern, weil sich damit nicht sonderlich gut rechnen lässt
Du weißt, dass im Kontext der Standardbibliothek von Python der Datentyp "array" auch nur eine eingeschränkte Form der Liste ist? Wenn deine Ausgangsdaten rein nummerisch sind - sind sie ja anscheinend - dann macht array und list keinen echten Unterschied.
Aber wie bekomme ich es hin, dass ich Spalten und Zeilen Anzahl variabel auswählen kann?
Wie Sirius3 schon sagt: DIE Python-Module dafür sind numpy und Pandas. Was für dich besser ist hängt davon ab, was du vor hast. Pandas sitzt auf numpy und hat bei zeit-basierten Daten oder Datensätzen mit Lücken / fehlenden Werten mehr / bessere Möglichkeiten als numpy.

Gruß, noisefloor
Stefsn
User
Beiträge: 16
Registriert: Dienstag 8. Oktober 2019, 06:12

Folgender Code macht das, was er soll. :)

Jetzt noch eine Frage. Das ist ja eigentlich sehr ineffizient, da erst alle Messwerte gespeichert werden, obwohl sie nicht benötigt werden. Jemand eine Idee, wie man das kombinieren kann? :)

Code: Alles auswählen

import csv

data_list = []
file = open("Messwerte.txt", "r")
csv_reader = csv.reader(file, delimiter=",")
for row in csv_reader:
   data_list.append(row)
file.close()

data_rows = [1,2,3]
data_columns = [0,1]
data = np.zeros((len(data_rows),len(data_columns)))
for c, data_row in enumerate(data_rows):
    for d, data_column in enumerate(data_columns):
        data[c][d] = data_list[data_row][data_column]
Benutzeravatar
noisefloor
User
Beiträge: 4193
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du kannst doch die TXT-Datei direkt in numpy einlegen:

Code: Alles auswählen

>>> import numpy as np
>>> data = np.loadtxt('daten.txt', dtype=int, delimiter=',')
>>> data
array([[13, 15, 45],
       [14,  9, 24],
       [24, 56, 34],
       [12, 34, 36]])
Gruß, noisefloor
Stefsn
User
Beiträge: 16
Registriert: Dienstag 8. Oktober 2019, 06:12

Aber das würde noch nicht die variable Datenselektion gewährleisten. :)
Benutzeravatar
noisefloor
User
Beiträge: 4193
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

doch, RTFM -> Link.

Beispiel:

Code: Alles auswählen

>>> data = np.loadtxt('daten.txt', dtype=int, delimiter=',', usecols=[0, 1,])
>>> data
array([[13, 15],
       [14,  9],
       [24, 56],
       [12, 34]])
>>> 
Außerdem kannst du im numpy Array dann immer noch Daten entfernen, maskieren etc.

Gruß, noisefloor
Stefsn
User
Beiträge: 16
Registriert: Dienstag 8. Oktober 2019, 06:12

Klasse. Dann werde ich das zuhause direkt mal ausprobieren.

Lieben danke!
Stefsn
User
Beiträge: 16
Registriert: Dienstag 8. Oktober 2019, 06:12

Also die Funktion macht leider nicht alles. Ich kann zwar sagen, welche Spalten (usecols) ich haben möchte, aber die Zeilen muss ich selbst raus löschen. Weil skiprows und max_rows ja dann zusammenhängend auslesen. :)

Dann muss das wohl manuell geschehen. :)
Antworten