Spalten in Form von arrays aus Textdatei extrahieren

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
Lennart
User
Beiträge: 12
Registriert: Sonntag 16. Dezember 2018, 13:15

Hallo,

ich habe eine Textdatei mit 4 Spalten, in denen Werte für physikalische Größen stehen. Ich möchte die Werte in den Spalten in Funktionen einsetzen, oder die eine Spalte mit der anderen multiplizieren etc.

Zu diesem Zweck hatte ich mir überlegt, die Spalten in Form von arrays in Python zu überführen und dort alle Berechnungen durchzuführen.

Mein Code sieht wie folgt aus:

Code: Alles auswählen

import numpy as np
data = np.genfromtxt(r"C:\Users\User\Desktop\praktikum\Daten\CV\X-CV-58.txt", delimiter = " ") #AppliedPotential, time, WE1current, WE1potential = data.T #the data is written into 4 arrays: applied potential, time, WE1-Current and WE1-Potential
ApplPotential, time, WE1current, WE1potential = data.T 
Und der Fehlercode:

Code: Alles auswählen

%run "C:\Users\User\Desktop\praktikum\Daten\CV\test1.py"

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
C:\Users\User\Desktop\praktikum\Daten\CV\test1.py in <module>()
     45 #     print(text)
     46 
---> 47 data = np.genfromtxt(r"C:\Users\User\Desktop\praktikum\Daten\CV\X-CV-58.txt", delimiter = " ") #AppliedPotential, time, WE1current, WE1potential = data.T #the data is written into 4 arrays: applied potential, time, WE1-Current and WE1-Potential
     48 ApplPotential, time, WE1current, WE1potential = data.T
     49 
C:\Users\User\AppData\Local\Enthought\Canopy\edm\envs\User\lib\site-packages\numpy\lib\npyio.py in genfromtxt(fname, dtype, comments, delimiter, skip_header, skip_footer, converters, missing_values, filling_values, usecols, names, excludelist, deletechars, replace_space, autostrip, case_sensitive, defaultfmt, unpack, usemask, loose, invalid_raise, max_rows, encoding)
   2029             # Raise an exception ?
   2030             if invalid_raise:
-> 2031                 raise ValueError(errmsg)
   2032             # Issue a warning ?
   2033             else:
ValueError: Some errors were detected !
    Line #2 (got 1 columns instead of 6)
    Line #3 (got 1 columns instead of 6)
    .
    .
    .
Was muss ich denn anders machen?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Lennart: Deine Datei sieht anders aus, als Du es genfromtxt sagst. Scheinbar willst Du 4 Spalten hast aber 6 oder 1. Wie sieht denn die Datei aus?
Lennart
User
Beiträge: 12
Registriert: Sonntag 16. Dezember 2018, 13:15

Habe einen Teil des Problems gelöst: Und zwar habe ich Spalten, die durch Leerzeichen getrennt sind. Habe statt delimeter = "", delimeter ="()". Somit bekomme ich keine Fehlermeldung, aber sonst auch nicht anderes. Sehe auch kein Array :?

So sehen meine Daten aus, betseht eigentlich aus über 2000 Zeilen.

https://picload.org/view/dccrdagd/unbenannt.png.html
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Deine Spalten sind durch Tabs `\t` getrennt, außerdem hast Du eine Header-Zeile.
Lennart
User
Beiträge: 12
Registriert: Sonntag 16. Dezember 2018, 13:15

Habe es jetzt geändert:

Code: Alles auswählen

data = np.genfromtxt(r"C:\Users\User\Desktop\praktikum\Daten\CV\X-CV-58.txt", delimiter = "\t", skip_header = 1) 
a,b,c,d = data.T
print(a)
print(b)
print(c)
print(d)
Und die Fehlermeldung ist:

Code: Alles auswählen

ValueError                                Traceback (most recent call last)
C:\Users\User\Desktop\praktikum\Daten\CV\test1.py in <module>()
     46 
     47 data = np.genfromtxt(r"C:\Users\User\Desktop\praktikum\Daten\CV\X-CV-58.txt", delimiter = "\t", skip_header = 1) 
---> 48 a,b,c,d = data.T
     49 print(a)
     50 print(b)
ValueError: too many values to unpack (expected 4) 
sind die über 2000 Werte zu viel? Ich dachte Python müsste das packen :?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann scheint es doch irgendwo mehr Spalten zu geben, eventuell nur leere.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lennart: Du versuchst 6 Spalten auf 4 Namen zu verteilen. Das geht logischerweise nicht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Denn wie man am Header erkennen kann, gibt es rechts noch die Spalten Q+ und Q-, die aber keine Daten enthalten.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Lennart
User
Beiträge: 12
Registriert: Sonntag 16. Dezember 2018, 13:15

Vielen Dank für die Antworten!
Weil die Spalten leer waren, dachte ich, dass sie nicht als Spalten gezählt werden, weil ich ja skip_header=1 hatte.

Aber jetzt bin ich schlauer :D
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lennart: Die Zeilen nach dem Header werden aber ziemlich sicher am Ende noch zwei Spaltentrenner haben, denn auch Felder in denen nichts steht, müssen ja getrennt werden. Wenn der Spaltentrenner ein '\t' ist, dann sieht man das natürlich nicht. Jedenfalls nicht solange man im Editor die Anzeige von „whitespace“-Zeichen nicht einschaltet.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten