2010-12-14 12 views
10

Wie kann ich eine .csv-Datei mit einem Python-Skript in eine .dbf-Datei konvertieren? Ich fand dieses piece des Codes online, aber ich bin nicht sicher, wie zuverlässig es ist. Gibt es Module mit dieser Funktionalität?Konvertieren von .csv-Datei in .dbf mit Python?

+3

Google sagt mir über http://www.fiby.at/dbfpy/ und http://pypi.python.org/pypi/dbf/0.88.16. Das 'dbf'-Format sieht jedoch ziemlich einfach aus; Sie sollten in der Lage sein, den von Ihnen geposteten Code zu überprüfen. – katrielalex

Antwort

5

Sie werden nichts im Internet finden, das eine CSV-Datei liest und eine DBF-Datei schreibt, so dass Sie sie einfach aufrufen und 2 Dateipfade bereitstellen können. Für jedes DBF-Feld müssen Sie den Typ, die Größe und (falls relevant) die Anzahl der Dezimalstellen angeben.

Einige Fragen:

Welche Software wird die Ausgabe DBF-Datei verbrauchen?

Es gibt nicht so etwas wie "das" (einzige) DBF-Dateiformat. Benötigen Sie dBase III? dBase 4? 7? Visual FoxPro? etc?

Was ist die maximale Länge des Textfelds, die Sie schreiben müssen? Haben Sie Nicht-ASCII-Text?

Welche Version von Python?

Wenn Ihre Anforderungen minimal sind (dBase III-Format, kein Nicht-ASCII-Text, Text < = 254 Byte lang, Python 2.X), sollte das von Ihnen angegebene Kochbuch-Rezept die Aufgabe erfüllen.

+0

Ja, ich verstehe ein bisschen besser, wie .csv jetzt in dbf konvertiert werden kann. Die Software, für die ich sie verwende, ist ArcGIS, ich kann jedoch nicht die Spezifikation finden, deren .dbf-Format verwendet wird. Es gibt keinen Nicht-ASCII-Text, die Python-Version ist 2.6 und die maximale Länge des Textfelds beträgt 20 Zeichen. – djq

5

Verwenden Sie die csv library, um Ihre Daten aus der CSV-Datei zu lesen. Die Drittanbieter-Bibliothek dbf kann eine dbf-Datei für Sie schreiben.

Bearbeiten: Ursprünglich habe ich dbfpy aufgelistet, aber die Bibliothek oben scheint aktiver aktualisiert zu werden.

+1

Sieht aus wie eine funktionale, wenn nicht sehr Pythonic, Bibliothek. Fügen Sie das zu meinen Lesezeichen definitiv hinzu --- danke für den Link! –

+0

Der größte Nachteil scheint eine schreckliche Dokumentation zu sein, die bei vielen Open-Source-Projekten ein Problem darstellt. – syrion

+2

Leider ist die Dokumentation für dbf so begrenzt, dass ich nicht einmal herausfinden kann, wie ich es benutze. Es gibt ein paar Beispielzeilen (die es ziemlich einfach aussehen lassen), aber sie funktionieren nicht. Trotzdem danke für die Antwort! – djq

2

Keine, die gut poliert sind, meines Wissens. Ich musste im Laufe der Jahre viele Male mit xBase-Dateien arbeiten, und ich merke immer wieder, dass ich Code schreibe, um es zu tun, wenn ich es tun muss. Ich habe irgendwo in einem meiner Backups eine ziemlich funktionsfähige reine Python-Bibliothek, aber ich weiß nicht genau, wo das ist.

Glücklicherweise ist das xBase-Dateiformat nicht so komplex. Sie können natürlich die Spezifikation on the Internet finden. Auf einen Blick sieht das Modul, das Sie verlinkt haben, gut aus, aber natürlich machen Sie Kopien von allen Daten, mit denen Sie arbeiten, bevor Sie es benutzen.

Eine solide, lesen/schreiben, voll funktionsfähige xBase-Bibliothek mit all den Schnickschnack ist etwas, das auf meiner TODO-Liste für eine Weile gewesen ist ... Ich könnte sogar dazu kommen, was dieses Jahr noch übrig ist Ich habe Glück ... (wahrscheinlich nicht, aber leider).

7

Mit der dbf package Sie können eine grundlegende CSV-Datei mit Code ähnlich wie diese bekommen:

import dbf 
some_table = dbf.from_csv(csvfile='/path/to/file.csv', to_disk=True) 

Diese Tabelle mit dem gleichen Namen erstellen wird und entweder Zeichen oder Memo-Felder und Feldnamen von f0, f1, f2 usw.

Verwenden Sie für einen anderen Dateinamen den Parameter filename, und wenn Sie Ihre Feldnamen kennen, können Sie auch den Parameter field_names verwenden.

some_table = dbf.from_csv(csvfile='data.csv', filename='mytable', 
     field_names='name age birth'.split()) 

Eine eher einfache Dokumentation ist verfügbar here.

Disclosure: Ich bin der Autor dieses Pakets.

+0

hat gut für mich gearbeitet. Nur ein Hinweis: Der csv sollte in Ihrem Beispiel keinen Header haben, ansonsten wird der Header als reguläre Zeile geparst. – grasshopper

+0

Ich bin ein wenig verwirrt: Ich schaue auf dbf 0.96.005, kann aber nicht entscheidend herausfinden, ob das Lesen und Schreiben von DBase IV-Dateien unterstützt wird oder nicht. Ich benutze jetzt dbfpy, bin aber bestrebt, endlich von Python 2 wegzukommen ... – parvus

+0

dBase IV wird noch nicht unterstützt. –

2

Ich habe hier ein Python-Skript erstellt. Es sollte für jedes csv-Layout anpassbar sein. Sie müssen Ihre DBF-Datenstruktur kennen, bevor dies möglich ist. Dieses Skript benötigt zwei CSV-Dateien, eine für Ihre DBF-Header-Setup und eine für Ihre Körperdaten. Viel Glück.

https://github.com/mikebrennan/csv2dbf_python

+0

Ihr Beispiel verwendet dbfpy, die leider nicht gepflegt wird und nicht für die Verwendung in Python3 aktualisiert wird - es verwendet CStringIO, ao Aber wenn man mit Python 2 ist OK, dieses Beispiel sollte einen Frühstart bieten. – parvus

Verwandte Themen