11
votes

Convertir le fichier .csv en .dbf en utilisant python?

Comment puis-je convertir un fichier .csv en fichier .dbf à l'aide d'un script Python? J'ai trouvé ce pièce de code en ligne mais je suis pas certain à quel point c'est fiable. Y a-t-il des modules qui ont cette fonctionnalité?


1 commentaires

Google me dit sur fiby.at/dbfpy et PYPI.PYTHON.ORG/PYPI/DBF/0.88.16 . Le format dbf semble assez simple, cependant; Vous devriez être capable de vérifier le code que vous avez posté vous-même.


5 Réponses :


5
votes

Utilisez le csv bibliothèque pour lire vos données de le fichier csv. La tierce partie dbf bibliothèque peut écrire un fichier dbf pour vous .

edit: à l'origine, j'ai énuméré dbfpy , mais la bibliothèque ci-dessus semble être plus activement mis à jour.


4 commentaires

On dirait un fonctionnel, sinon très pythonique, bibliothèque. Je ajoute définitivement cela à mes favoris --- Merci pour le lien!


Le plus gros inconvénient semble être une documentation terrible, qui est un problème avec de nombreux projets open source.


Malheureusement, la documentation pour DBF est tellement limitée, je ne peux même pas comprendre comment l'utiliser. Il y a quelques exemples de lignes de code (qui le rendent assez facile), mais ils ne fonctionnent pas. Néanmoins, merci pour la réponse!


C'est vraiment utile, j'ai utilisé dbfpy.



2
votes

Aucun qui sont bien polis, à ma connaissance. J'ai dû travailler avec des fichiers Xbase plusieurs fois au fil des ans et je continue à me retrouver un code pour le faire quand je dois le faire. J'ai, quelque part dans l'une de mes sauvegardes, une jolie bibliothèque fonctionnelle et python pour le faire, mais je ne sais pas précisément où c'est.

Heureusement, le format de fichier Xbase n'est pas tout ce complexe. Vous pouvez trouver la spécification sur Internet , bien sûr. En un coup d'œil, le module que vous avez lié à l'air bien, mais bien sûr, faites des copies de toutes les données avec lesquelles vous travaillez avant de l'utiliser.

Une bibliothèque xbase solide, lecture / écriture et entièrement fonctionnelle avec toutes les cloches et sifflets est quelque chose qui a été sur ma liste de TODO pendant un moment ... je pourrais même y arriver dans ce qui reste cette année, si je 'M Lucky ... (probablement pas, cependant, malheureusement).


0 commentaires

6
votes

Vous ne trouverez rien sur le net qui lit un fichier CSV et écrit un fichier DBF tel que vous pouvez simplement l'appeler et fournir 2 chemins de fichiers. Pour chaque champ DBF, vous devez spécifier le type, la taille et (le cas échéant) Nombre de décimales.

Quelques questions:

Quel logiciel va consommer le fichier DBF de sortie?

Il n'y a pas de format de fichier DBF (un et unique) (un et unique). Avez-vous besoin de dbase III? dbase 4? 7? Visual FoxPro? etc?

Quelle est la longueur maximale du champ de texte que vous devez écrire? Avez-vous du texte non-ASCII?

Quelle version de Python?

Si vos exigences sont minimes (format DBASE III, aucun texte non ASCII, texte <= 254 octets longue, Python 2.x), puis la recette de recettes que vous avez citée devrait faire le travail.


1 commentaires

Oui, je comprends un peu mieux comment .csv peut être converti en DBF maintenant. Le logiciel que j'utilise pour est ArcGIS, mais je ne trouve pas la spécification dont le format .DBF est utilisé. Il n'y a pas de texte non ASCII, la version Python est de 2,6 et la longueur maximale du champ de texte est de 20 caractères.



8
votes

Utilisation du package DBF Vous pouvez obtenir un fichier CSV de base avec code similaire à ceci: xxx pré>

Ceci créera une table avec le même nom et les champs de caractère ou de mémo et les noms de champs de F0, F1, F2, etc. P>

pour un autre Nom de fichier Utilisez le paramètre code> FileName CODE>, et si vous connaissez les noms de champs, vous pouvez également utiliser le paramètre FIDE_NAMES CODE>. P>

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


7 commentaires

travaillé bien pour moi. Juste une note: le CSV ne doit pas avoir d'en-tête dans votre exemple, sinon l'en-tête est analysé comme une rangée régulière.


Je suis un peu confus: je regarde le DBF 0.96.005, mais je ne peux pas comprendre de manière décisive si la lecture et l'écriture de fichiers dbase IV sont soutenus ou non. J'utilise dbfpy maintenant, mais je suis impatient de m'éloigner de Python 2 ...


dBase IV n'est pas encore pris en charge.


@ Ethan je reçois une erreur lib \ sites-packages \ dbf.py ", ligne 3637, dans add_fields soulever FieldSpecerror (" La longueur maximale du nom de champ est de 10. "% s 'est% d caractères D."% (nom , len (nom)))) en écrivant DBF de CSV. Mon CSV a une en-tête, mais le paimètre de champ de champ semble être de ne pas travailler pourrait vous aider? -


@Sislam: Cela ressemble à une ancienne version. Essayez le dernier: sudo pip installation dbf -pgrade .


Merci mais cela crée .dbt fichier? et .DBF est vide avec simplement des en-têtes?


@Sislam: Je pense que vous devez poser une nouvelle question. Assurez-vous d'inclure les versions que vous utilisez et les résultats que vous obtenez.



2
votes

J'ai créé un script Python ici. Il devrait être personnalisable pour toute mise en page CSV. Vous devez connaître votre structure de données DBF avant que cela ne soit possible. Ce script nécessite deux fichiers CSV, un pour votre configuration de l'en-tête DBF et une pour vos données corporelles. bonne chance.

https://github.com/mikebrennan/csv2dbf_python


1 commentaires

Votre exemple utilise DBFPY, qui malheureusement ne semble pas être maintenu et n'est pas mis à jour pour une utilisation dans Python3 - il utilise cstringio, a.o. Mais si l'on est correct avec Python 2, cet exemple devrait fournir un démarrage de saut.