DBFreader Python 3.7 проблемы - PullRequest
0 голосов
/ 21 декабря 2018

Я хочу работать с файлами dbf на Python 3.7 с модулем dbfread, он работает с небольшим dbf

from dbfread import DBF
from struct import *

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

Вывод:

OrderedDict([('NUMUSER', '    0'), ('NOMUSER', 'Rosy'), ('PASSWORD', ''), ('NIVEL', 'SUPER'), ('VALIDAR', 'P?@qMwá¿|Ew}"Q-JW0Q0:iw^'), ('EMAIL', 'MARLENGURROLA@gmail.com|'), ('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]

, но когда я пытаюсь с большимdbf показывает ошибку

from dbfread import DBF
from struct import *

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

Вывод 2:

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]

Я не знаю, как собирать или распаковывать данные в python, можете ли вы помочь мне, ребята?или дать руководство.Спасибо!

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

это работает !!

    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'])

выход:

    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
[Завершено в 0,4 с]

0 голосов
/ 21 декабря 2018

Я не использую dbfread сам, поэтому я не знаю, почему он не работает.

Вы можете попробовать использовать мою библиотеку, dbf, которая выглядела быкак:

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
...