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]])
经过搜索并尝试 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]])