2008-09-01 113 views
21

Tengo un montón de archivos DBF FoxPro (VFP9) en mi sistema Ubuntu, ¿hay una biblioteca para abrirlos en Python? Solo necesito leerlos, y preferiblemente también tendré acceso a los campos memo.¿Cuál es la forma más fácil de leer un archivo DBF de FoxPro desde Python?

actualización: Gracias @cnu, he usado de Yusdi Santoso dbf.py y funciona muy bien. Uno gotcha: La extensión del nombre del archivo de memo debe ser minúscula, es decir, .fpt, no .FPT, que era como el nombre del archivo provenía de Windows.

Respuesta

7

Puedes probar este recipe on Active State.

También hay un DBFReader module que puede probar.

Para soporte para memo fields.

+5

El [módulo DBFReader] (http://www.garshol.priv.no/download/software/python/dbfreader.py) es ahora un vínculo roto. – Caltor

+1

En el programa de campos memo, da el número de datos no exactos de cómo recuperar los datos en función de ese número de índice donde está almacenado. – MONTYHS

+0

Desde septiembre de 2008 (hora de la respuesta), hay muchas más opciones (noviembre de 2015), por ejemplo: https://pypi.python.org/pypi/dbf, https://pypi.python.org/pypi/ dbfread /, http://sourceforge.net/projects/dbfpy/. Personalmente elegí dbfread porque está bien documentado. –

16

Prefiero dbfpy. Es compatible con la lectura y la escritura de archivos .DBF y puede hacer frente a la mayoría de las variaciones del formato. Es la única implementación que he encontrado que puede leer y escribir los archivos DBF heredados de algunos sistemas anteriores con los que he trabajado.

9

Si aún está revisando esto, tengo un convertidor de GPL FoxPro a PostgreSQL al https://github.com/kstrauser/pgdbf. Lo usamos para copiar rutinariamente nuestras tablas en PostgreSQL para informes rápidos.

+0

Casualmente vi esto mientras buscaba otra cosa. Ahora, un amante de postgreSQL, proveniente de VFP y MS SQL, esto es muy apreciado. ¡Gracias! –

5

Salida http://groups.google.com/group/python-dbase

Actualmente soporta Foxpro 6.0 db archivos de Visual dBase III y ... no estoy seguro si el cambio de la estructura del archivo en VFP 9 o no ...

+1

El código más actualizado está en [PyPI] (http://pypi.python.org/pypi/dbf/). –

8

yo era capaz de leer una Archivo DBF (con archivos BAK, CDX, FBT, TBK asociados) utilizando el paquete dbf de PyPI http://pypi.python.org/pypi/dbf. Soy nuevo en Python y no sé nada sobre los archivos DBF, pero funcionó fácilmente para leer un archivo DBF del negocio de mi novia (creado con una aplicación POS de tienda de música llamada AIMsi).

Después de instalar el paquete de DBF (utilicé aptitud e instalado DBF versión 0.88 creo), el siguiente código Python trabajó:

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

Eso es todo lo que sé por ahora, pero espero que es un comienzo útil para alguien otra persona que encuentra esta pregunta!

21 de de abril de, 2012 SJK Editar: Por el comentario de Ethan Furman, debo señalar que en realidad no sé lo que de los archivos de datos eran necesarios, además del archivo DBF. La primera vez que ejecuté el script, con solo DBF disponible, me quejé de un archivo de soporte faltante. Entonces, acabo de copiar sobre BAK, CDX, FPT (no FBT como dije antes de editar), archivos TBK y luego funcionó.

+1

Este paquete aún no admite archivos IDX/CDX, aunque espero tenerlo en su lugar este año. –

+0

¿Estás seguro de que era FBT y no FPT? Los archivos FPT son los archivos memo. CDX es el archivo de índice, aunque @Ethan dice que estos no son compatibles, por lo que es poco probable que sea el archivo que falta. Junto con DBF estos son los únicos 3 archivos que debería necesitar para leer un DBF/Table. – Caltor

+0

¡Sip! Typo, me refiero a FPT. Voy a editar arriba si puedo. ¡Gracias! –

4

Ahora es 2016 y tuve que jugar con el paquete dbf para que funcione. He aquí una versión python3 simplemente exportar un archivo DBF a un csv

import dbf 

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

que tenía algún error Unicode al principio, pero tengo alrededor de ese desactivando notas.

import dbf 

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