2008-09-01 3 views
21

Ich habe eine Reihe von FoxPro (VFP9) DBF-Dateien auf meinem Ubuntu-System, gibt es eine Bibliothek, um diese in Python zu öffnen? Ich muss sie nur lesen und hätte am liebsten auch Zugang zu den Memo-Feldern.Was ist der einfachste Weg, um eine FoxPro DBF-Datei von Python zu lesen?

Update: Danke @cnu, ich habe Yusdi Santoso dbf.py verwendet und es funktioniert gut. One Gotcha: Die Memo-Dateinamenerweiterung muss Kleinbuchstaben, d. H. .fpt, nicht .FPT sein, wie der Dateiname aus Windows kam.

Antwort

7

Sie können dies recipe on Active State versuchen.

Es gibt auch eine DBFReader module, die Sie ausprobieren können.

Zur Unterstützung für memo fields.

+5

Der [DBFReader Modul] (http://www.garshol.priv.no/download/software/python/dbfreader.py) ist jetzt ein toter Link. – Caltor

+1

In Memo-Felder Programm geben Sie die Nummer nicht genaue Daten, wie Sie die Daten auf der Grundlage der Indexnummer abrufen, wo diese gespeichert. – MONTYHS

+0

Seit September 2008 (Zeitpunkt der Antwort) gibt es viele weitere Optionen (Nov 2015), zum Beispiel: https://pypi.python.org/pypi/dbf, https://pypi.python.org/pypi/ dbfread /, http://sourceforge.net/projects/dbfpy/. Ich persönlich habe dbfread gewählt, weil es gut dokumentiert ist. –

16

Ich bevorzuge dbfpy. Es unterstützt das Lesen und Schreiben von .DBF Dateien und kann mit den meisten Variationen des Formats umgehen. Es ist die einzige Implementierung, die ich gefunden habe, die die alten DBF-Dateien einiger älterer Systeme lesen und schreiben konnte, mit denen ich gearbeitet habe.

9

Wenn Sie dies noch überprüfen, habe ich einen GPL FoxPro-zu-PostgreSQL-Konverter um . Wir verwenden es, um unsere Tabellen routinemäßig für eine schnelle Berichterstellung in PostgreSQL zu kopieren.

+0

Ich sah dies zufällig, während ich nach etwas anderem suchte. Jetzt ein PostgreSQL Liebhaber, der von VFP und von MS SQL kommt, wird das sehr geschätzt. Vielen Dank! –

5

Check out http://groups.google.com/group/python-dbase

Es unterstützt derzeit dBase III und Visual FoxPro 6.0 db Dateien ..., wenn die Datei Layoutänderung in VFP 9 oder nicht nicht sicher ...

+1

Der aktuellste Code ist auf [PyPI] (http://pypi.python.org/pypi/dbf/). –

8

ich in der Lage war zu lesen DBF-Datei (mit verknüpften BAK-, CDX-, FBT-, TBK-Dateien **) mit dem dbf-Paket von PyPI http://pypi.python.org/pypi/dbf. Ich bin neu bei Python und weiß nichts über DBF-Dateien, aber es funktionierte problemlos, um eine DBF-Datei aus dem Geschäft meiner Freundin zu lesen (erstellt mit einer Musikhaus-POS-Anwendung namens AIMsi).

Nach dem DBF-Paket installieren (I verwenden Eignung und installierte dbf Version 0.88 glaube ich), der folgende Python-Code gearbeitet:

from dbf import * 
test = Table("testfile.dbf") 
for record in test: 
    print record 
    x = raw_input("") # to pause between showing records 

, dass alles, was ich jetzt weiß, aber hoffentlich ist es ein nützliches Start für jemanden sonst wer findet diese Frage!

21. April 2012 SJK Edit: Per Ethan Furman Kommentar, sollte ich darauf hinweisen, dass ich eigentlich nicht wissen, welche der Datendateien waren notwendig, neben der DBF-Datei. Als ich das Skript das erste Mal mit nur dem DBF ausführte, klagte es über eine fehlende Supportdatei. Also, ich habe einfach über die BAK, CDX, FPT (nicht FBT wie gesagt), TBK-Dateien kopiert und dann hat es geklappt.

+1

Dieses Paket unterstützt noch keine IDX/CDX-Dateien, obwohl ich hoffe, dass es in diesem Jahr vorhanden ist. –

+0

Sind Sie sicher, dass es FBT und nicht FPT war? FPT-Dateien sind die Memodateien. CDX ist die Indexdatei, obwohl @Ethan sagt, dass diese nicht unterstützt werden, so dass es unwahrscheinlich ist, dass sie die fehlende Datei ist. Zusammen mit dem DBF sind dies die einzigen 3 Dateien, die Sie benötigen, um einen DBF/Tabelle zu lesen. – Caltor

+0

Yup! Typo, ich meinte FPT. Ich werde oben bearbeiten, wenn ich kann. Vielen Dank! –

4

Es ist 2016 jetzt und ich musste mit dem dbf-Paket geigen, um es zum Laufen zu bringen. Hier ist eine python3 Version nur eine DBF-Datei in eine CSV-Export

import dbf 

d=dbf.Table('mydbf.dbf') 
d.open() 
dbf.export(d, filename='mydf_exported.csv', format='csv', header=True) 

ich zunächst einige Unicode-Fehler hatte, bekam aber um die von Memos ausschalten.

import dbf 

d=dbf.Table('mydbf.dbf', ignore_memos=True) 
d.open() 
dbf.export(d, filename='mydf_exported.csv', format='csv', header=True)