使用 python dbfread lib 在使用非 ascii 字符几分钟后,只有 4 个 DOS Borland Dbase 300mb dbf 文件错误之一

问题描述 投票:0回答:1

我读取了 4 个文件,但其中一个文件使用以下代码时出现此错误: dbfread 给出此错误:

return decode_text(text, self.encoding, errors=self.char_decode_errors) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ UnicodeDecodeError: 'ascii' codec can't decode byte 0xac in position 11: ordin

加载 300mb 文件。根据谷歌,它需要字符格式。我有 4 个 dbf 文件,除了这个之外,全部都用 dbfread 加载。

from dbfread import DBF

    def load_data_from_dbf(self, num=10000):
        records = list(DBF(self.dbf_file_path))[-num:]
        with self.data_lock:
            self.df = pd.DataFrame(records)
            self.index1DF = self.df.set_index([self.indexf[0]])
            if len(self.indexf) > 1:
                self.index2DF = self.df.set_index([self.indexf[1]])
python geopandas shapefile dbf dbase
1个回答
-2
投票

经过搜索并尝试 geopandas 后,问题得到解决。因此没有进一步调查是什么字符导致了 dbfread 的问题。 geopandas 可以读取文件并转换为 DataFrame,而 dbfread lib 中的 DBF 则不能。

这是一个代码片段:

import geopandas as gpd
def load_data_from_dbf(self, num=100000):
    tempdf = gpd.read_file(self.dbf_file_path)
    indexDF = tempdf.tail(num).set_index([self.indexf[0]])
    with self.data_lock:
        self.df = tempdf
        self.index1DF = indexDF
        if len(self.indexf) > 1:
            self.index2DF = self.df.set_index([self.indexf[1]])
© www.soinside.com 2019 - 2024. All rights reserved.