Code: Alles auswählen
array[12][3]=[
['Spannung','U1','V'],
['Strom','I1','mA'],
...
['etwa',' ','so']
]
--
Grüße
Christoph
Code: Alles auswählen
array[12][3]=[
['Spannung','U1','V'],
['Strom','I1','mA'],
...
['etwa',' ','so']
]
Ich will jeweils auf die 3 Elemente einer Zeile indiziert zugreifen, alsoEyDu hat geschrieben:Im Allgemeinen: mit Listen oder Tupeln. Bei dir im Speziellen? Das hängt davon ab, was du mit den Daten machen willst.
Code: Alles auswählen
ueberschrift = array[i][0]
groesse = array[i][1]
einheit = array[i][2]
Habe jetzt doch eine schönere Methode mit numpy arrays gefunden:BlackJack hat geschrieben:@Krischu: Wie schon gesagt: Listen.
Code: Alles auswählen
self.header=np.empty((i, 3), dtype=object)
Code: Alles auswählen
self.header[i][0]=f.readline().rstrip()
self.header[i][1]=f.readline().rstrip()
self.header[i][2]=f.readline().rstrip()
So, dann begründe es bitte mal, was daran "megahäßlich" oder Murks sein sollBlackJack hat geschrieben:@Krischu: Äh, das ist nicht schön sondern MEGAHÄSSLICH. Wenn man so einen Murks macht, dann möchte man nicht in Python programmieren. Echt nicht.
Gut, ich will es mal etwas präzisieren:BlackJack hat geschrieben:@Krischu: Du verwendest hier Python nicht wie Python sondern wie eine Sprache wo man Arrays vorher in der passenden Grösse anfordert und dann füllt und dabei Indexvariablen verwendet. Das ist kein idiomatisches Python.
Wie man Dein konkretes Problem in Python löst, lässt sich ohne das Problem zu kennen nicht so einfach sagen. In der Regel kommt man ohne Indexvariablen aus. Listen werden dynamisch aufgebaut und über die Elemente kann man direkt iterieren, ohne den Umweg über einen Index.
Code: Alles auswählen
from collections import namedtuple
from itertools import chain, takewhile
from pprint import pprint
import numpy as np
Header = namedtuple('Header', 'name variable unit')
def load_special_format(filename):
with open(filename, 'r') as lines:
lines = (line.rstrip() for line in lines)
headers = list()
for line in lines:
if '\t' in line:
break
headers.append(Header(line, next(lines), next(lines)))
value_lines = takewhile(lambda s: '\t' in s, chain([line], lines))
values = chain.from_iterable((line.split() for line in value_lines))
array = np.fromiter(values, np.float).reshape((-1, len(headers)))
return headers, array
def main():
pprint(load_special_format('test.txt'))
if __name__ == '__main__':
main()
Code: Alles auswählen
Spannung
U1
V
Strom
I1
mA
1 2
3 4
5 6
Und noch ein Nachspann...
der ignoriert wird.
Code: Alles auswählen
([Header(name='Spannung', variable='U1', unit='V'),
Header(name='Strom', variable='I1', unit='mA')],
array([[ 1., 2.],
[ 3., 4.],
[ 5., 6.]]))