Seite 1 von 1

Probleme bei Tab-getrennten Daten

Verfasst: Dienstag 9. Dezember 2014, 15:39
von sos
Servus zusammen,

ich habe bei einem Projekt eine Datendatei ausgespuckt bekommen und versuche nun seit geraumer Zeit diese plotten zu lassen. Leider tue ich mir schwer bei der Definition der Definition der Datensatztrennung. Ich hab es schon mit delimiter versucht, das hat jedoch auch nicht so funktioniert wie erwünscht.

Mein Skript sieht bisher so aus:

Code: Alles auswählen

#!/usr/bin/python

import numpy as np
import matplotlib.pyplot as plt

with open("/temp/bsp.txt") as f:
    data = f.read()

data = data.split('\n')

x=[row.split(' ')[0] for row in data]
y=[row.split(' ')[1] for row in data]
z=[row.split(' ')[2] for row in data]

fig = plt.figure()

ax1 = fig.add_subplot(111)

ax1.set_title("Plot title...")    
ax1.set_xlabel('Zeit')
ax1.set_ylabel('Kraft')


ax1.plot(x,y, c='r', label='Diagramm')

leg = ax1.legend()

plt.show()
Die Daten sehen in etwa so aus:

Code: Alles auswählen

Zeit	Kraft	Dehnung
0,000	-0,000	-0,000
50,000	0,000	0,003
100,000	-0,001	0,004
(die Formatierung kommt hier nicht rüber, ist halt durch ein Tab getrennt)

Als Fehlermeldung bekomme ich "y=[row.split(' ')[1] for row in data]
IndexError: list index out of range"

Hat jemand einen Tipp für mich, wie ich ihn dazu bringe, die Daten der TXT sauber auszulesen?

Danke und Gruß

Martin

Re: Probleme bei Tab-getrennten Daten

Verfasst: Dienstag 9. Dezember 2014, 16:00
von BlackJack
@sos: Wenn die Daten durch Tabulatorzeichen getrennt sind, dann kann man sie nicht an Leerzeichen aufteilen. Im vorliegenden Fall könnte `split()` *ohne* ein Argument funktionieren.

Das Plotten von Zeichenketten-Werten könnte dann das nächste Problem werden. Du musst die Zeichenketten mit den Ziffern in Zahlen umwandeln.

Re: Probleme bei Tab-getrennten Daten

Verfasst: Dienstag 9. Dezember 2014, 16:37
von garreth
Servus zusammen,

leider kann ich dir mit dem plot nicht helfen. Ich habe mir allerdings deine Textdatei nachgebaut und versucht diese vernünftig in drei Listen einzufügen. Hier mein Vorschlag: (Python 3)

Code: Alles auswählen

f = open('bsp.txt', 'r')

x = []
y = []
z = []

for line in f:
    line = line.rstrip('\n')
    data = line.split('\t')
    
    try:
        x.append(float(data[0].replace(',','.')))
        y.append(float(data[1].replace(',','.')))
        z.append(float(data[2].replace(',','.')))
    except ValueError:
        print('Keine gültigen Daten')

print(x,y,z)

Re: Probleme bei Tab-getrennten Daten

Verfasst: Dienstag 9. Dezember 2014, 16:51
von sos
aaah, weil python das "," durch einen "." ersetzt haben will, nicht wahr?

Re: Probleme bei Tab-getrennten Daten

Verfasst: Dienstag 9. Dezember 2014, 17:04
von pillmuncher
ungetestet:

Code: Alles auswählen

import csv

with open("/temp/bsp.txt") as data_file:
    table = csv.reader(data_file, delimiter='\t')
    data = ((float(col.replace(',', '.')) for col in row) for row in table)
    xs, ys, zs = zip(*data)

Re: Probleme bei Tab-getrennten Daten

Verfasst: Dienstag 9. Dezember 2014, 17:10
von garreth
sos hat geschrieben:aaah, weil python das "," durch einen "." ersetzt haben will, nicht wahr?
Richtig, float Zahlen werden immer durch Punkte getrennt. Wenn du versuchst das mit Komma zu machen wird er dir immer einen "ValueError" schmeißen.

Re: Probleme bei Tab-getrennten Daten

Verfasst: Dienstag 9. Dezember 2014, 17:17
von sos
Perfekt, vielen Dank, da war ich jetzt ne ganze Ecke dran gehangen. Das Plotten funktioniert auch. Jetzt knabbere ich erst mal ein wenig an der richtigen Interpolation der Y-Achse und wenn ich daran scheitern sollte wende ich mich noch mal an euch wenn ich darf! Vielen Dank!