2010-12-14 56 views
10

¿Cómo puedo convertir un archivo .csv en un archivo .dbf utilizando una secuencia de comandos python? Encontré este piece de código en línea, pero no estoy seguro de qué tan confiable es. ¿Hay algún módulo por ahí que tenga esta funcionalidad?¿Convertir el archivo .csv en .dbf usando Python?

+3

Google me habla de http://www.fiby.at/dbfpy/ y http://pypi.python.org/pypi/dbf/0.88.16. Sin embargo, el formato 'dbf' parece bastante simple; deberías poder verificar el código que publicaste tú mismo. – katrielalex

Respuesta

5

No encontrará nada en la red que lea un archivo CSV y escriba un archivo DBF para que pueda invocarlo y suministrar 2 rutas de archivos. Para cada campo DBF, debe especificar el tipo, tamaño y (si corresponde) el número de decimales.

Algunas preguntas:

¿Qué software se va a consumir el archivo DBF de salida?

No existe el formato de archivo "DBF" (el único). ¿Necesitas dBase III? dBase 4? 7? Visual FoxPro? etc?

¿Cuál es la longitud máxima de campo de texto que debe escribir? ¿Tienes texto que no sea ASCII?

¿Qué versión de Python?

Si sus requisitos son mínimos (formato dBase III, texto no ASCII, texto < = 254 bytes de longitud, Python 2.X), la receta de libro de cocina que citó debería hacer el trabajo.

+0

Sí, entiendo un poco mejor cómo .csv se puede convertir a dbf ahora. El software para el que lo estoy usando es ArcGIS, pero no puedo encontrar la especificación del formato .dbf que se usa. No hay texto que no sea ASCII, la versión de Python es 2.6 y la longitud máxima del campo de texto es de 20 caracteres. – djq

5

Utilice csv library para leer sus datos del archivo csv. La biblioteca de terceros dbf puede escribir un archivo dbf para usted.

Editar: Originalmente, enumeré dbfpy, pero la biblioteca de arriba parece estar más activamente actualizada.

+1

Parece una biblioteca funcional, si no muy pitonica. Definitivamente estoy agregando eso a mis marcadores --- ¡gracias por el enlace! –

+0

El mayor inconveniente parece ser una documentación terrible, que es un problema con muchos proyectos de código abierto. – syrion

+2

Lamentablemente, la documentación para dbf es tan limitada que ni siquiera puedo descubrir cómo usarla. Hay algunas líneas de código de ejemplo (que lo hacen parecer bastante fácil), pero no funcionan. Sin embargo, gracias por la respuesta! – djq

2

Ninguno que esté bien pulido, que yo sepa. He tenido que trabajar con archivos xBase muchas veces a lo largo de los años, y sigo encontrándome escribiendo código para hacerlo cuando tengo que hacerlo. Tengo, en alguna parte de una de mis copias de seguridad, una biblioteca bastante funcional y pura de Python para hacerlo, pero no sé exactamente dónde está eso.

Afortunadamente, el formato de archivo xBase no es tan complejo. Puede encontrar la especificación on the Internet, por supuesto. De un vistazo, el módulo con el que se ha vinculado se ve bien, pero por supuesto hace copias de cualquier dato con el que esté trabajando antes de usarlo.

Una biblioteca sólida, de lectura/escritura, totalmente funcional xBase con todas las características es algo que ha estado en mi lista de cosas por hacer por un tiempo ... Incluso podría llegar a esto en lo que queda este año, si Tengo suerte ... (probablemente no, lamentablemente).

7

Utilizando el dbf package puede obtener un archivo csv básica con un código similar a este:

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

Esto creará tabla con el mismo nombre y ninguno de los personajes o nota de campos y nombres de campo de f0, f1, f2 , etc.

Para un nombre de archivo diferente, utilice el parámetro filename, y si conoce los nombres de los campos, también puede usar el parámetro field_names.

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

Bastante documentación básica está disponible here.

Divulgación: soy el autor de este paquete.

+0

funcionó bien para mí. Solo una nota: la csv no debe tener un encabezado en su ejemplo, de lo contrario, el encabezado se analiza como una fila normal. – grasshopper

+0

Estoy un poco confundido: estoy viendo dbf 0.96.005, pero no puedo determinar de manera decisiva si la lectura y escritura de archivos DBase IV son compatibles o no. Estoy usando dbfpy ahora, pero estoy ansioso por finalmente alejarme de Python 2 ... – parvus

+0

dBase IV aún no es compatible. –

2

He creado un script de python aquí. Debe ser personalizable para cualquier diseño de csv. Necesita conocer su estructura de datos DBF antes de que esto sea posible. Este script requiere dos archivos csv, uno para la configuración del encabezado DBF y otro para los datos de su cuerpo. buena suerte.

https://github.com/mikebrennan/csv2dbf_python

+0

Tu ejemplo usa dbfpy, que desafortunadamente no parece mantenerse y no está actualizado para usarse en Python3 - usa CStringIO, ao Pero si uno está bien con Python 2, este ejemplo debería proporcionar un comienzo de salto. – parvus