Comment puis-je convertir un fichier .csv en fichier .dbf en utilisant un script python? J'ai trouvé ce piece de code en ligne mais je ne suis pas certain de la fiabilité. Y a-t-il des modules qui ont cette fonctionnalité?Convertir le fichier .csv en .dbf en utilisant Python?
Répondre
Vous ne trouverez rien sur le net qui lit un fichier CSV et écrit un fichier DBF de sorte que vous pouvez l'appeler et fournir 2 chemins de fichier. Pour chaque champ DBF, vous devez spécifier le type, la taille et (le cas échéant) le nombre de décimales.
Quelques questions:
Qu'est-ce que le logiciel va consommer le fichier DBF de sortie?
Le format de fichier DBF "le" (un et unique) n'existe pas. 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 besoins sont minimes (format dBase III, texte non-ASCII, texte < = 254 octets, Python 2.X), la recette de livre de recettes que vous avez citée devrait faire l'affaire.
Oui, je comprends un peu mieux comment .csv peut être converti en dbf maintenant. Le logiciel pour lequel je l'utilise est ArcGIS, mais je ne trouve pas la spécification du format .dbf utilisé. Il n'y a pas de texte non-ASCII, la version python est 2.6, et la longueur maximale du champ de texte est de 20 caractères. – djq
Utilisez le csv
library pour lire vos données à partir du fichier .csv. La bibliothèque tierce dbf
peut écrire un fichier dbf pour vous.
Éditer: À l'origine, j'ai énuméré dbfpy
, mais la bibliothèque ci-dessus semble être mise à jour plus activement.
On dirait une bibliothèque fonctionnelle, sinon très Pythonic. Je vais définitivement ajouter cela à mes favoris --- merci pour le lien! –
Le plus gros inconvénient semble être une documentation terrible, ce qui est un problème avec de nombreux projets open source. – syrion
Malheureusement, la documentation de dbf est si limitée que je n'arrive même pas à comprendre comment l'utiliser. Il y a quelques exemples de lignes de code (ce qui le rend plutôt facile), mais elles ne fonctionnent pas. Néanmoins, merci pour la réponse! – djq
À ma connaissance, aucune d'elles n'est bien polie. J'ai dû travailler avec des fichiers xBase plusieurs fois au cours des années, et je continue à trouver du code pour le faire quand je dois le faire. J'ai, quelque part dans une de mes sauvegardes, une bibliothèque très fonctionnelle et pure-Python pour le faire, mais je ne sais pas exactement où c'est.
Heureusement, le format de fichier xBase n'est pas si complexe. Vous pouvez trouver la spécification on the Internet, bien sûr. D'un coup d'œil, le module auquel vous avez établi un lien semble correct, mais bien sûr, vous devez copier des données avec lesquelles vous travaillez avant de l'utiliser. Une bibliothèque xBase solide, en lecture/écriture, entièrement fonctionnelle avec toutes les fonctions est quelque chose qui a été sur ma liste TODO pendant un moment ... Je pourrais même y arriver dans ce qui reste cette année, si J'ai de la chance ... (probablement pas, malheureusement).
Utilisation du dbf package vous pouvez obtenir un fichier csv de base avec un code similaire à ceci:
import dbf
some_table = dbf.from_csv(csvfile='/path/to/file.csv', to_disk=True)
Cela va créer table avec le même nom et soit des champs de caractères ou Mémo et noms de champs de f0, f1, f2 , etc.
Pour un nom de fichier différent, utilisez le paramètre filename
. Si vous connaissez vos noms de champs, vous pouvez également utiliser le paramètre field_names
.
some_table = dbf.from_csv(csvfile='data.csv', filename='mytable',
field_names='name age birth'.split())
Une documentation assez basique est disponible here.
Divulgation: Je suis l'auteur de ce paquet.
a bien fonctionné pour moi. Juste une note: le csv ne devrait pas avoir un en-tête dans votre exemple, sinon l'en-tête est analysé comme une ligne régulière. – grasshopper
Je suis un peu confus: je regarde dbf 0.96.005, mais je n'arrive pas à comprendre de façon décisive si la lecture et l'écriture de fichiers DBase IV sont supportés ou non. J'utilise dbfpy maintenant, mais je suis impatient de finalement m'éloigner de Python 2 ... – parvus
dBase IV n'est pas encore supporté. –
J'ai créé un script python ici. Il devrait être personnalisable pour toute disposition de 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 d'en-tête DBF et un pour vos données de corps. bonne chance.
Votre exemple utilise dbfpy, qui malheureusement ne semble pas être maintenu et n'est pas mis à jour pour Python3 - il utilise CStringIO, ao Mais si on est OK avec Python 2, cet exemple devrait fournir un bon départ. – parvus
Google me parle http://www.fiby.at/dbfpy/ et http://pypi.python.org/pypi/dbf/0.88.16. Le format 'dbf' semble assez simple, cependant; vous devriez être en mesure de vérifier le code que vous avez affiché vous-même. – katrielalex