DBFreader python 3.7 issues

i want to work with dbf Files on Python 3.7 with dbfread Module, it works with a small dbf

from dbfread import DBF
from struct import *

table = DBF('usuarios.dbf', load=True)
for item in table:
    print (item)

Output:

OrderedDict([('NUMUSER', '    0'), ('NOMUSER', 'Rosy'), ('PASSWORD', ''), ('NIVEL', 'SUPER'), ('VALIDAR', 'P?@qMwá¿|Ew}"Q-JW0Q0:iw^'), ('EMAIL', '[email protected]|'), ('MAILTIPO', 1), ('MAILFIRMA', None), ('MAILSMTP', 'Ghf2U*wT3Ik?D#>W0@+9@," ¡.deZ+%¿i?GL0oBrO+éZ=KwXw{E(LXIv#ñOññW+t"AruéñAm\\O>YB$iTNv*\'Ñé2).*qv#88XZ5k%KK%R}~¡oOgiTó\'=#'), ('HUELLA1', None), ('HUELLA2', None), ('METODO', 0), ('ACTIVO', True)])
[Finished in 0.2s]

but when i try with a large dbf it shows error

from dbfread import DBF
from struct import *

table = DBF('docum.dbf', load=True)
for item in table:
    print (item)

Output2:

Traceback (most recent call last):
  File "C:\Users\user\rdbfs.py", line 4, in <module>
    table = DBF('docum.dbf', load=True)
  File "C:\Python3\lib\site-packages\dbfread\dbf.py", line 121, in __init__
    self._read_header(infile)
  File "C:\Python3\lib\site-packages\dbfread\dbf.py", line 206, in _read_header
    self.header = DBFHeader.read(infile)
  File "C:\Python3\lib\site-packages\dbfread\struct_parser.py", line 41, in read
    return self.unpack(file.read(self.struct.size))
  File "C:\Python3\lib\site-packages\dbfread\struct_parser.py", line 36, in unpack
    items = zip(self.names, self.struct.unpack(data))
struct.error: unpack requires a buffer of 32 bytes
[Finished in 0.2s with exit code 1]

i don't know about pack or unpack data in python, can you help me guys? or give guideance. Thanks!

Upvotes: 5

Views: 2130

Answers (2)

it works!!

    import dbf

ruta = 'Y:/SAITBC/'
table = dbf.Table(ruta+'clientes.dbf')
tablita = table.open()
print(tablita)

#for item in tablita:
#   print(item)

record = tablita[0]
print (record['nomcli'])

output:

    Table:         Y:/SAITBC/clientes.dbf
    Type:          Foxpro
    Codepage:      cp1252 (Windows ANSI)
    Status:        DbfStatus.READ_ONLY
    Last updated:  2018-12-20
    Record count:  1282
    Field count:   79
    Record length: 1230 
    --Fields--
      0) numcli C(5)
      1) nomcli C(200)
      2) calle C(60)
      3) numext C(10)
      4) colonia C(60)
      5) ciudad C(30)
      6) estado C(20)
      7) cp C(10)
      8) telefono C(30)
      9) fax C(20)
     10) clasif C(5)
     11) ventano N(12,2)
     12) ultvent D
     13) atvent C(40)
     14) atcobr C(40)
     15) rfc C(13)
     16) limcred N(12,2)
     17) saldo N(12,2)
     18) pjedesc N(5,2)
     19) diascred N(3,0)
     20) precioutil C(1)
     21) recepfac C(30)
     22) pagofac C(30)
     23) obs M
     24) email1 C(40)
     25) email2 C(40)
     26) numcta C(20)
     27) uid N(10,0)
     28) numvend C(5)
     29) obligareq L
     30) suspendido L
     31) bloqueasop L
     32) direnvio M
     33) otrosdatos M
     34) impuesto1 N(6,2)
     35) retencion1 N(10,4)
     36) retencion2 N(6,2)
     37) permitecod L
     38) llavecred L
     39) tiposop C(10)
     40) clavecli C(20)
     41) curp C(20)
     42) pais C(15)
     43) nomcomer C(40)
     44) cfgdatdoc M
     45) datosfe M
     46) statusweb N(1,0)
     47) claveweb C(32)
     48) numzona C(5)
     49) metodopago M
     50) metodousar C(2)
     51) tiposys C(10)
     52) licencia N(10,0)
     53) ncontra C(10)
     54) pass C(10)
     55) rsocial N(10,0)
     56) usanom L
     57) contnomi C(10)
     58) passnom C(10)
     59) numint C(10)
     60) cosac C(2)
     61) modi L
     62) altasg D
     63) usocfdi C(3)
     64) formapago C(2)
     65) fechanac D
     66) pjepuntos N(5,2)
     67) pjedescmes N(5,2)
     68) pjedescdia N(5,2)
     69) implocal M
     70) poliza C(10)
     71) vencsait D
     72) usaenl L
     73) vencnom D
     74) rsocnom N(10,2)
     75) usabov L
     76) vencbov D
     77) tiponom C(20)
     78) condpago C(30)

PEÑUELAS TAPIA JAIME ROJO
[Finished in 0.4s]

Upvotes: 0

Ethan Furman
Ethan Furman

Reputation: 69288

I don't use dbfread myself, so I don't know why it's not working.

You can try using my library, dbf, which would look like:

import dbf

table = dbf.Table('usuarios.dbf')
table.open()
for item in table:
    print item

record = table[0]  # first record
print record.numuser
print record.nomuser

Upvotes: 2

Related Questions