user8359450
user8359450

Reputation:

Convert to CSV error (dbfpy)

I'm having an error converting DBF to CSV

import csv
from dbfpy import dbf
import os
import sys

filename = 'crop1-fx.dbf'
if filename.endswith('.dbf'):
    print ("Converting %s to csv" % filename)
    csv_fn = filename[:-4]+ ".csv"
    with open(csv_fn,'wb') as csvfile:
        in_db = dbf.Dbf(filename)
        out_csv = csv.writer(csvfile)
        names = []
        for field in in_db.header.fields:
            names.append(field.name)
        out_csv.writerow(names)
        for rec in in_db:
            out_csv.writerow(rec.fieldData)
        in_db.close()
        print ("Done...")
else:
  print ("Filename does not end with .dbf")

"C:\Users\User\Anaconda2\python.exe" "C:/Users/User/Desktop/Python/23/dbf/convertCSV.py" Converting crop1-fx.dbf to csv

Traceback (most recent call last):  

  File "C:/Users/User/Desktop/Python/23/dbf/convertCSV.py", line 17, in 
    for rec in in_db:

  File "C:\Users\User\Anaconda2\lib\site-packages\dbfpy\dbf.py", line 262, in __getitem__
    return self.RecordClass.fromStream(self, self._fixIndex(index))

  File "C:\Users\User\Anaconda2\lib\site-packages\dbfpy\record.py", line 121, in fromStream
    return cls.fromString(dbf, cls.rawFromStream(dbf, index), index) 

  File "C:\Users\User\Anaconda2\lib\site-packages\dbfpy\record.py", line 140, in fromString
    [_fd.decodeFromRecord(string) for _fd in dbf.header.fields]) 

  File "C:\Users\User\Anaconda2\lib\site-packages\dbfpy\fields.py", line 178, in decodeFromRecord
    return self.decodeValue(self.rawFromRecord(record)) 

  File "C:\Users\User\Anaconda2\lib\site-packages\dbfpy\fields.py", line 246, in decodeValue
    return float(value)

  ValueError: invalid literal for float(): -1.#IND00000000000

Upvotes: 0

Views: 346

Answers (1)

Ethan Furman
Ethan Furman

Reputation: 69031

The error is exactly what it says: -1.#IND00000000000 is not a valid float. So either your table is corrupted, there is a bug in pdfpy (unlikely in this case), or your table still has 24-digit numbers.

24-digit numbers, by the way, are invalid according to the original dbf specifications.

Upvotes: 1

Related Questions