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]
dbf Datein verschmelzen
gib mal ein konkretes Beispiel. Ich versteh das Problem nicht ganzmupic 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
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?
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?
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.
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.
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
Code: Alles auswählen
['354', '644', '247', '358']
€dit:
Ahhh!
Genau falsch verstanden!
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
Code: Alles auswählen
{'1': ['354', '247'], '2': ['644', '358']}
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:
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!
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:]]
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.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:
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.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:]]
Danke erstmal!