DBFtoCSV

De WikiSalud
Saltar a: navegación, buscar

Script para convertir .dbf a .csv


Construccion.jpg

Licencia: gpl2 

Lenguaje de programación: python ver 2.7

Fuentes para descargar el  código:

http://code.google.com/p/dbf2csv/downloads/detail?name=dbf2csv.tar.gz  

http://code.google.com/p/dbf2csv/downloads/list


Script en Python simple utiliza para convertir archivos dbf a csv.

Uso: python dbf2csv.py INPUT.dbf OUTPUT.CSV PAGE_SIZE

PAGE_SIZE es opcional, Es el número de registros a incluir en cada archivo.

Esto se puede utilizar para evitar archivos muy grandes.

Se divide la salida en múltiples archivos con el nombre OUTPUT.0.csv, OUTPUT.1.csv, OUTPUT.2.csv, OUTPUT.3.csv, etc 


Modificaciones: 

Hacer cambios si hay problemas al convertir los tipo FALSE TRUE, se pasa a utilizar  0 y 1

1) Agregar función def isNotEmpty(s) en el archivo dbfpy/dbf.py

import sys
import string
import time
 
try: import binnum 
except ImportError: from mocons.lib.utils import binnum 
 
try: import strutil 
except ImportError: from mocons.lib.utils import strutil 
 
def isNotEmpty(s):
    return bool(s and s.strip())


2) Utilizar la función isNotEmpty(s) en la función decodeValue en la clase DbfMemoFieldDef. Archivo dbfpy/dbf.py

def decodeValue(self, rawval):
		'''system: answer .dbt block number
		jjk  02/18/98'''
	        if (isNotEmpty(rawval) == False): 
		   rawval = "0"
		try:
		        return(string.atoi(string.strip(rawval)))
		except ValueError:
			return(string.atol(string.strip(rawval)))

Ejemplo: Para convertir un archivo .dbf en un solo archivo .csv (recuerde ubicarse en la consola dentro de la carpeta descomprimida, asegurarse se encuentre el archivo  dbf2csv.py)

    python dbf2csv.py hnmsal.DBF hnmsal.csv 0 


Cambio de delimitador:  

    Originalmente trae la coma como delimitador, para modificar ir al archivo parser.py y en las funciones header y records  sustituir por el caracter deseado, ejemplo con delimitador |


def header(db, output):
    if(not db.isOpen() or output.closed):
        pass
        # TODO: Exception
 
    header = ""
    for field_name in db.fieldNames():
        header += field_name + "|"
 
    output.write(header[:-1] + "\n")
 
 
def records(db, output, offset, records):
    if(not db.isOpen() or output.closed):
        pass
        # TODO: Exception
 
    for i in range(offset, offset + records):
        rec = db[i]
 
        rec_str = ""
        for fldName in db.fieldNames():
            rec_str += str(rec[fldName]) + '|'
 
        output.write(rec_str[:-1] + "\n")

 

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas