Moin,
ich bin mit meinem Verständnis von Python noch nicht so weit und habe daher eine wahrscheinlich recht triviale Frage.
Wie bekomme ich Einzelwerte, die aus diversen Liste per Iterationen ausgelesen werden in eine gemeinsame Liste geschrieben?
Ich habe diverse Variablen die allesamt Listen verkörpern. Diese werden auseinander gerupft und zur Zeit durch \n in jeweil eine eigene Zeile geschrieben.
Dadurch erhalte ich ja quasi Spalten. Die "Spalten" würde ich aber halt gern so miteineander verbinden, das ich eine Matrix erhalte in der erst die erste Spalte, dann die zweite usw. kommt. Dabei muss der erste Ausdruck der zweiten Spalte aber auch an zweiter Stelle in der ersten Zeile der resultierenden Matrix erscheinen.
Wie bekomme ich das hin?
Vielen Dank,
Thomas
Daten aus unterschiedlichen Quellen in gemeinsame Liste
Bitte das Problem noch einmal genauer beschreiben. Vielleicht mit einem Beispiel wie die Daten ausehen, was Du bisher an Code hast, und wie das Ergebnis aussehen soll.
-
- User
- Beiträge: 5
- Registriert: Mittwoch 12. November 2008, 13:43
Ok, hätte mich auch gewundert wenn das verständlich gewesen wäre.
Ich benötige Daten aus einem HDF5 Dokument, welches ich unter Verwendung von numpy und pytables einlese. Mit den itertools zerlege ich dann die Listenstruktur. Das HDF5 Dokument besteht vollständig aus Tabellen und diese werden mir durch pytables als Listen mit jeder Menge Listen darin (1645 um genau zu sein) ausgegeben.
Wie hier ja deutlich wird, schreibe ich z.Z. die Werte in Textdateien. Ich benötige aber eigentlich eine Liste in Python, die den ersten Wert von Latitude in der ersten Zeile an der ersten Stelle hat und den ersten Wert von Longitude in der ersten Zeile an der zweiten Stelle hat. Danach soll ein Zeilenumbruch erfolgen und das zweite Wertepaar geschrieben werden.
Ich hoffe das ist jetzt ein wenig mehr aufschlussreich.
Danke
Thomas
Ich benötige Daten aus einem HDF5 Dokument, welches ich unter Verwendung von numpy und pytables einlese. Mit den itertools zerlege ich dann die Listenstruktur. Das HDF5 Dokument besteht vollständig aus Tabellen und diese werden mir durch pytables als Listen mit jeder Menge Listen darin (1645 um genau zu sein) ausgegeben.
Code: Alles auswählen
import tables, numpy, os, math, sys, itertools
filename = r"OMI-Aura_L2-OMDOMINO_2008m1015t1201-o22619_v003-2008m1017t131859.he5"
swathname = "DominoNO2"
hdf5file = tables.openFile(filename, mode = "r", rootUEP = "HDFEOS/SWATHS/" + swathname)
geo = hdf5file.getNode("/", "Geolocation Fields")
lat = geo.Latitude.read()
long = geo.Longitude.read()
# latitude
latf = open("latitude.txt", "w")
for latslice in itertools.islice(lat, None):
for latcol in itertools.islice(latslice, None):
latf.write( str(latcol) + '\n')
latf.close()
# longitude
longf = open("longitude.txt", "w")
for longslice in itertools.islice(long, None):
for longcol in itertools.islice(longslice, None):
longf.write( str(longcol) + '\n')
longf.close()
Ich hoffe das ist jetzt ein wenig mehr aufschlussreich.
Danke
Thomas
Kleine Anmerkung vorweg
ist die kaum lesbare(und minimal langsamere) Version von:
Wenn ``lat`` und ``long`` normale Listen sind und ich dein Problem richtig verstanden habe, würde ich es so machen:
Code: Alles auswählen
for item in itertools.islice(foo, None):
Code: Alles auswählen
for item in foo:
Wenn ``lat`` und ``long`` normale Listen sind und ich dein Problem richtig verstanden habe, würde ich es so machen:
Code: Alles auswählen
long_lat = open("both", "w")
for i in xrange(min(len(lat), len(long))):
long_lat.write( "%s %s\n" % (lat[i][0], long[i][0]))
Oder ohne Index mit `itertools.izip()`:
Code: Alles auswählen
for latitude, longitude in izip(latitudes, longitudes):
long_lat_file.write('%s %s\n' % (latitude[0], longitude[0]))
-
- User
- Beiträge: 5
- Registriert: Mittwoch 12. November 2008, 13:43
@Darii
Kommt darauf an, was du unter einer normalen Liste verstehst.
long und auch lat sehen quasi so aus:
[[value,value, value, value, value, value, value]
[value, value, value, value, value, value, value]
[value, value, value, value, value, value, value]
...]
Daher meine Umschreibung mit viele Listen in einer Liste.
Ansonsten versuche ich deinen Code zu verstehen
Gruss
Thomas
Kommt darauf an, was du unter einer normalen Liste verstehst.
long und auch lat sehen quasi so aus:
[[value,value, value, value, value, value, value]
[value, value, value, value, value, value, value]
[value, value, value, value, value, value, value]
...]
Daher meine Umschreibung mit viele Listen in einer Liste.
Ansonsten versuche ich deinen Code zu verstehen
Gruss
Thomas
-
- User
- Beiträge: 5
- Registriert: Mittwoch 12. November 2008, 13:43
@BlackJack
Die Geschichte mit dem izip finde ich ja ziemlich fluffig, leider komme ich mit dem Code so wie du ihn geschrieben hast nicht hin. Ich muss immer 'itertools.izip' schreiben. Sonst ist er der Meinung das izip nicht definiert ist. Vielleicht habe ich das Prinzip mit den Listen noch nicht so richtig verstanden, denn der folgende Code funktioniert nicht:
Die Fehlermeldung ist: IndexError: invalid index to scalar variable.
Thomas
Die Geschichte mit dem izip finde ich ja ziemlich fluffig, leider komme ich mit dem Code so wie du ihn geschrieben hast nicht hin. Ich muss immer 'itertools.izip' schreiben. Sonst ist er der Meinung das izip nicht definiert ist. Vielleicht habe ich das Prinzip mit den Listen noch nicht so richtig verstanden, denn der folgende Code funktioniert nicht:
Code: Alles auswählen
long_lat = open("test", "w")
for ListLat, ListLong in itertools.izip(lat, long):
for StrLat, StrLong in itertools.izip(ListLat, ListLong):
long_lat.write('%s %s\n' % (StrLat[0], StrLong[0]))
Thomas
Eine normale Liste ist einfach eine normale liste oder verhält sich so. In diesem Fall: Man kann über foo[index] auf die einzelnen Elemente zugreifen.Swordfishtrombones hat geschrieben:Kommt darauf an, was du unter einer normalen Liste verstehst.
Streich einfach die 2. For-Zeile. Da ListLat und ListLong deiner Beschreibung nach nur ein Element haben kannst du auch direkt über ListLat[0] darauf zugreifen und musst nicht erst darüber iterieren.
Um direkt auf izip ohne itertools zugreifen zu können brauchst du
Code: Alles auswählen
from itertools import izip
-
- User
- Beiträge: 5
- Registriert: Mittwoch 12. November 2008, 13:43
Super!
Danke Euch beiden. Das geht affenschnell und macht genau das was es soll!
Gruss
Thomas
Danke Euch beiden. Das geht affenschnell und macht genau das was es soll!
Gruss
Thomas