Seite 1 von 1
dbf Datein verschmelzen
Verfasst: Dienstag 22. Juli 2008, 17:25
von mupic
Hallo,
ich habe 365 DBF Datein. Jede enthält 2 Spalten:
Nr. Wert
1 121
2 254
3 487
4 354
5 154
...
Ich möchte die zu einer verschmelzen:
Nr Wert Wert1 Wert2 Wert3
...
Vom Format her sind die exakt gleich.
Kann mir da jemand helfen? Gibt es da eine schnelle Lösung in Python?
Bin Anfänger und irgend etwas kompliziertes werde ich nicht umsetzen können.
Einen Tip für ein anderes Programm das das kann wäre auch schon hilfreich!
Danke!
[/list]
Re: dbf Datein verschmelzen
Verfasst: Dienstag 22. Juli 2008, 17:29
von audax
mupic hat geschrieben:Hallo,
ich habe 365 DBF Datein. Jede enthält 2 Spalten:
Nr. Wert
1 121
2 254
3 487
4 354
5 154
...
Ich möchte die zu einer verschmelzen:
Nr Wert Wert1 Wert2 Wert3
gib mal ein konkretes Beispiel. Ich versteh das Problem nicht ganz

Verfasst: Dienstag 22. Juli 2008, 17:39
von mupic
Ok. Also ich habe für eine Reihe von geographischen Punkten (1800 Stück) für jeden Tag eines Jahres Einstrahlungswerte berechnet. Die Ausgabe erfolgte als dbf Datein (Ascii). Allerdings habe ich jetzt für jeden Tag eine Datei. Ich muss die nun aber unbedingt in eine Ascii Datei bekommen.
Tag 1:
Punkt Einstrahlungswert
1 354
2 644
...
Tag 2:
Punkt Einstrahlungswert
1 247
2 358
...
Jetzt suche ich irgendeine Möglichkeit, diese vielen Tabellen zu einer zu verschmelzen. Rein theoretisch würde es reichen, wenn ich aus jeder dbf Datei die 2. Spalte auslesen und diese dann in einen neuen file schreiben könnte. Anschließend die jeweils 2. Spalte der anderen Tabellen auch in diesen neuen File einfügen. Ergebnis sollte eine Tabelle mit 365 Werten haben.
Ich brauche diese, um sie wieder mit den geographischen Punkten zu kombinieren. Klicke ich dann einen Punkt an, dann zeigt er mir für jeden Tag des Jahres die modellierten Einstrahlungswerte an.
Aber wie bekomme ich diese vielen dbf zusammen?
Verfasst: Dienstag 22. Juli 2008, 18:02
von BlackVivi
2 Funktionen fielen mir ein...
Die erste erwartet *args aus Dateinamen und gibt'n Dic zurück, die 2te erwartet ein Dic und gibt eine List zurück, die aus Listen besteht...
[[1, 1231231, 124321, 32131, 13132], [2, 1321321, 321321, 321321, 132132], ...]
Du musst halt schauen wie dolle du das halt wiederbenutzbar machen willst... also wie stark abstrahieren.
Verfasst: Dienstag 22. Juli 2008, 18:06
von audax
Code: Alles auswählen
#-*- coding: utf-8 -*-
# das Einlesen der Datei sollte ja kein Problem sein...
day_1 = """\
Punkt Einstrahlungswert
1 354
2 644"""
day_2 = """\
Punkt Einstrahlungswert
1 247
2 358 """
def extract(text):
# text aufteilen
lines = text.splitlines()
# erste Zeile entfernen
lines = lines[1:]
# erste Spalte entfernen
values = []
for line in lines:
point, value = line.split()
values.append(value)
return values
total = []
total += extract(day_1)
total += extract(day_2)
print total
Ergebnis:
So war das gemeint, oder?
€dit:
Ahhh!
Genau falsch verstanden!
Verfasst: Dienstag 22. Juli 2008, 18:10
von audax
Code: Alles auswählen
#-*- coding: utf-8 -*-
# das Einlesen der Datei sollte ja kein Problem sein...
day_1 = """\
Punkt Einstrahlungswert
1 354
2 644"""
day_2 = """\
Punkt Einstrahlungswert
1 247
2 358 """
def extract(text, data):
# text aufteilen
lines = text.splitlines()
# erste Zeile entfernen
lines = lines[1:]
for line in lines:
point, value = line.split()
if not point in data:
data[point] = []
data[point].append(value)
# alternativ:
# data.get(point, []).append(value)
return data
data = {}
extract(day_1, data)
extract(day_2, data)
print data
So nun aber.
Verfasst: Dienstag 22. Juli 2008, 18:21
von mupic
Hi,
ja genau so soll es aussehen, nur dass die Reihen dann untereinander in eine Datei ausgegeben werden.
Bitte hilf mir noch beim Einlesen und Auslesen der Datei. Bei meinem letzten script habe ich eine Textdatei folgendermaßen eingelesen:
Code: Alles auswählen
f = open('E:\\Staff\\test\\sample.txt', 'r')
s = f.read().splitlines()
vals = [dict(zip(s[0].split(), line.split())) for line in s[1:]]
Wenn ich das wieder benutze, wie spreche ich da die komplette 2 Reihe an und wie schreibe ich diese in eine neue Datei? Kann Python meine dbf auch lesen? Dann müßte ich das wiederholen und immer wieder diese neue Datei mit einer Spalte erweitern.
Danke erstmal!
Verfasst: Dienstag 22. Juli 2008, 18:35
von audax
mupic hat geschrieben:Hi,
ja genau so soll es aussehen, nur dass die Reihen dann untereinander in eine Datei ausgegeben werden.
Bitte hilf mir noch beim Einlesen und Auslesen der Datei. Bei meinem letzten script habe ich eine Textdatei folgendermaßen eingelesen:
Code: Alles auswählen
f = open('E:\\Staff\\test\\sample.txt', 'r')
s = f.read().splitlines()
vals = [dict(zip(s[0].split(), line.split())) for line in s[1:]]
Wenn ich das wieder benutze, wie spreche ich da die komplette 2 Reihe an und wie schreibe ich diese in eine neue Datei? Kann Python meine dbf auch lesen? Dann müßte ich das wiederholen und immer wieder diese neue Datei mit einer Spalte erweitern.
Danke erstmal!
Nach dem Code hast du ein Dictionary mit {point: value} und du musst nur ein neues Dictionary bilden mit {point: [value, value, ...]}. Aller Code den du dafür brauchst steht sogar schon hier im Thread.