Me han soltado en el curro para aprender python para hacer cosas en Arcmap 10. Así que estoy aprendiendo python sobre la marcha e intentando recordar la programación que he hecho.
Donde estoy en este proyecto es convertir un dbf, o csv, xls de una manera sencilla. A partir de ahí, todos los archivos se copiarán juntos en un solo archivo. Tengo el todo-en-uno xls de trabajo, pero no puedo encontrar un fácil, simple dbf a xls solución.
He condensado el código que se encuentra aquí: http://blog.gmane.org/gmane.comp.python.education/page=12
dentro:
from xlwt import Workbook
import dbfpy.dbf
input0 = '...file.dbf'
output = '...file.xls'
def test1():
dbf = dbfpy.dbf.Dbf(input0)
book = Workbook()
sheet1 = book.add_sheet('Sheet 1')
for row in range(len(dbf)):
for col in range(2):#chop to two for my purposes, gm
sheet1.row(row).write(col, dbf[row][col])
book.save(output)
test1()
Esto funciona, menos la falta de nombres de campo.
2 votos
Dado que Excel abre archivos DBF directamente, sin pérdida de información, ¿por qué es necesario realizar una conversión?
0 votos
¿has usado arcmap ultimamente? el quickexport_interop no soporta xls o xlsx. dbfpy one hace una hoja (creo). csv solo tiene una hoja, tambien. Estoy tratando de resumir muchos archivos a la vez, algunos con 10k + filas. Dentro de arcmap con el archivo abierto, esto toma demasiado tiempo.
0 votos
Para aclarar las cosas: sí, sé que excel puede abrir dbf y csv. si puedo obtener resultados de QuickExport en xls, sé cómo combinarlos por columna en un archivo. aceptaré sugerencias para combinar dbf, pero aún así necesitaré que acabe en xls. una vez hecho esto, el archivo se pondrá bonito, se formateará y se enviará a clientes, directores, etc.
0 votos
Entonces, ¿cuál es exactamente el problema con su fragmento publicado? ¿Sus cabeceras dbf no llegan a Excel?
0 votos
Dbf to xls no trae los nombres de los campos. Todo lo que obtengo son dos columnas de valores.
1 votos
Eso es porque necesita escribir una fila de nombres de campo: su código sólo escribe los registros de datos uno a uno.
0 votos
Gracias a Chad, puedo convertir pero la primera fila está sobrescrita por el encabezado, así que el código no es correcto como el siguiente, gracias. from xlwt import Workbook, easyxf import dbfpy.dbf from time import time def test1(): dbf = dbfpy.dbf.Dbf("pipelines.dbf", readOnly = True) header_style = easyxf('font: name Arial, bold True, height 200;') book = Workbook() sheet1 = book. add_sheet('Hoja 1') for (i, name) in enumerate(dbf.fieldNames): sheet1.write(0, i, name, header_style) for (i, thecol) in enumerate(dbf.fieldDefs): name, thetype, thelen, thedec = str(thecol).split() colwidth = max(len(name), int(thelen)) sheet1.col(