python下用dbfread操作DBF文件 您所在的位置:网站首页 dbf数据库如何筛选 python下用dbfread操作DBF文件

python下用dbfread操作DBF文件

2023-10-01 21:46| 来源: 网络整理| 查看: 265

dbf文件可用excel打开,同时exel也可以将文件另存为dbf格式。

dbfread项目地址:https://github.com/zycool/dbfread

dbfread库官方文档:https://dbfread.readthedocs.io/en/latest/dbf_objects.html

安装:pip install dbfread

dbfread库是用来操作DBF文件(数据库文件),只有读取和删除的操作,没有写入操作。

DBF文件对象,不常用的没有做整理。

from  dbfread import DBF

table1=DBF('E:\pythoninterviewquestions\meng_one.DBF',encoding='gbk',char_decode_errors='ignore',load=True) 1.load=False 默认情况下,记录将直接从磁盘流式传输。如果通过 load=True,则将它们加载到列表中,并用作records和deleted属性。 您可以随时使用load()和 unload()方法加载和卸载记录。

2.encoding=None 指定要使用的字符编码。 缺省情况下,dbfread将尝试从language_driver字节中猜测字符编码 。如果失败,则返回ASCII。

3.char_decode_errors=‘strict’ 用于处理解码错误的错误处理方案。这作为errors选项传递给该 bytes.decode()方法。从该方法的文档中: “默认值为’strict’,这意味着解码错误会引发UnicodeDecodeError。其他可能的值是’ignore’和’replace’,以及在codecs.register_error中注册的任何其他可处理UnicodeDecodeErrors的名称。”

方法 1.load 将记录加载到内存中。这将同时加载记录和已删除的记录。在records和deleted属性现在将记录名单。 2.unload 从内存中卸载记录。在records和deleted 属性现在会的实例RecordIterator,从磁盘流记录。

属性 1.records 如果表已加载,则这是记录列表。如果不是,那是一个 RecordIterator对象。无论哪种情况,对其进行迭代或调用len()都将得到相同的结果。 2.deleted 如果加载了表,则这是已删除记录的列表。如果不是,那是一个RecordIterator对象。无论哪种情况,对其进行迭代或调用len()都将得到相同的结果。

3.loaded TRUE 如果记录已加载到内存中

4.name 表名。这是文件名的小写字母

5.date 文件上次更新的日期(如datetime.date),或者 None日期全为零或无效。

6.field_names 字段名称的列表,按它们在文件中出现的顺序排列。例如,这可以用于在CSV文件中生成标题行。

7.encoding 文件中使用的字符编码。这由language_driver标头中的字节确定 ,可以用encoding关键字参数覆盖 。

8.filename DBF文件的文件名。

接下来进行一些简单的实例操作 1.打开一个DBF文件,有两个方法

#方法1: table1=DBF('E:\pythoninterviewquestions\meng_one.DBF',encoding='gbk',char_decode_errors='ignore',load=True) #方法2: with DBF('E:\pythoninterviewquestions\meng_one.DBF') as e: 2.读取DBF文件记录 如果打开DBF文件方法,默认是load=False,那么记录将直接从磁盘流式传输。不可以通过table1[index]读取数据。通过遍历的方法读取

table1=DBF('E:\pythoninterviewquestions\meng_one.DBF',encoding='gbk',char_decode_errors='ignore') for rows in table1:     print(table1) 输出结果可以看到返回的一行数据是一个有序字典。 加load=True,则将它们加载到列表中,可以records属性访问数据

table1=DBF('E:\pythoninterviewquestions\meng_one.DBF',encoding='gbk',char_decode_errors='ignore',load=True) print(table1.records) 输出结果可以看出,列表的元素都是一个有序字典。 文件打开后我们可以获取第一行的字段名,可以只获取行数据

table1=DBF('E:\pythoninterviewquestions\meng_one.DBF',encoding='gbk',char_decode_errors='ignore',load=True)

#获取第一行的字段值,数据 res1=table1.records[0]  #返回的是有序字典,可以使用字典的keys,values属性 res2=res1.keys() res3=res1.values() print(res2) print(res3)  

实例:

用python3实现如下功能:

有两个dbf文件1.dbf,2.dbf,将2.dbf文件中的数据插入到1.dbf中,重复数据无需插入。上网查了很多资料,看了很多外置库排了一些坑。 外部库 适用python版本 实现功能 pdfpy python2.x 可以对DBF文件进行写入 dbfread python2.x/3.x 可以对DBF文件的读取,删除 xlwt python2.x/3.x 可以对DBF文件进行写入 openpyxl python2.x/3.x 不可以对DBF文件进行读取 xlrd python2.x/3.x 不可以对DBF文件进行读取 xlsxwriter python2.x/3.x 还没试

总结:想要通过python3实现对DBF文件的读写,可以通过dbfread和xlwt这两个外置库。  

from dbfread import DBF import xlwt table1=DBF('E:\pythoninterviewquestions\SCD_98_601_20200327_DJ.DBF',encoding='gbk',char_decode_errors='ignore') table2=DBF('E:\pythoninterviewquestions\SCD_98_601_20200327_DJ_add.DBF') list1=[table1,table2] data=[] row1=() for i in list1: for rows in i: row1 =tuple(rows.keys()) temp=tuple(rows.values()) if temp not in data: data.append(temp) data.insert(0,row1) # print(data) # print(len(data)) #向meng_three.DBF写入 wb = xlwt.Workbook() #创建工作薄 f = wb.add_sheet('class1') #创建工作表 for i in range(len(data)): for j in range(len(row1)): f.write(i,j,data[i][j]) wb.save('E:\pythoninterviewquestions\meng_three.DBF')

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有