0

I wrote a little program to convert dbf files to csv and it works on 80 % files. When I try to convert whole folder I get error on last 2 dbf files.

UnicodeDecodeError: 'ascii' codec can't decode byte 0x88 in position 14: ordinal not in range(128)

This is my program:

import csv
from dbfread import DBF
from tkinter import filedialog
from tkinter import *
import os, sys
import glob


def dbf_to_csv(dbf_table_pth):#Input a dbf, output a csv, same name, same path, except extension
    csv_fn = dbf_table_pth[:-4]+ ".csv" #Set the csv file name
    table = DBF(dbf_table_pth)# table variable is a DBF object
    with open(csv_fn, 'w',encoding = 'utf-8', newline = '') as f:# create a csv file, fill it with dbf content
        writer = csv.writer(f)
        writer.writerow(table.field_names)# write the column name
        for record in table:# write the rows
            writer.writerow(list(record.values()))
    return csv_fn# return the csv name
listOfFiles = []

def get_filenames():
    Tk().withdraw()
    print("Initializing Dialogue... \\nPlease select a file.")
    tk_filenames = filedialog.askdirectory()
    tempDir = tk_filenames
    return tempDir


choosen_dir = get_filenames()

os.chdir(choosen_dir)
for file in glob.glob("*.dbf"):
    listOfFiles.append(file)

for file in listOfFiles:
    dbf_to_csv(file)

Here I paste Trackback:

Traceback (most recent call last):
  File "C:\Pliki po Dawidzie\Converter\main.py", line 35, in <module>
    dbf_to_csv(file)

  File "C:\Pliki po Dawidzie\Converter\main.py", line 15, in dbf_to_csv
    for record in table:# write the rows

  File "C:\Users\maciej.olech\PycharmProjects\pythonProject\venv\lib\site-packages\dbfread\dbf.py", line 314, in _iter_records
    items = [(field.name,

  File "C:\Users\maciej.olech\PycharmProjects\pythonProject\venv\lib\site-packages\dbfread\dbf.py", line 315, in <listcomp>
    parse(field, read(field.length))) \

  File "C:\Users\maciej.olech\PycharmProjects\pythonProject\venv\lib\site-packages\dbfread\field_parser.py", line 79, in parse
    return func(field, data)

  File "C:\Users\maciej.olech\PycharmProjects\pythonProject\venv\lib\site-packages\dbfread\field_parser.py", line 87, in parseC
    return self.decode_text(data.rstrip(b'\0 '))

  File "C:\Users\maciej.olech\PycharmProjects\pythonProject\venv\lib\site-packages\dbfread\field_parser.py", line 45, in decode_text
    return decode_text(text, self.encoding, errors=self.char_decode_errors)

UnicodeDecodeError: 'ascii' codec can't decode byte 0x88 in position 14: ordinal not in range(128)

Thanks for any help help.

user3840170
  • 26,597
  • 4
  • 30
  • 62
maciej.o
  • 127
  • 1
  • 13

0 Answers0