python读取dbf文件,转xls文件

文章目录

  • python读取dbf文件,转xls文件
    • 依赖库安装
    • 代码实现
      • 读取dbf
      • dbf转xls
      • dbf转xls(批量)
      • dbf入库Postgres
    • 参考链接
    • 写在最后

  今天遇到了一个需求,将大批量的dbf文件(存储矢量Shapefile文件的属性信息)转换为表格xls,主要探索了dbfpy库和dbfread库:尝试后发现dbfpy库效果并不好,不兼容python3.x版本,存在中文数据乱码现象;而dbfread库可以对DBF文件进行读取,删除操作,且兼容 python2.x/3.x 版本。

依赖库安装

# 官方文档链接 https://dbfread.readthedocs.io/en/latest/introduction.html# 测试环境:python环境 3.7
pip install dbfread #安装dbfread库# 安装pandas库(已安装请忽略,推荐使用conda来安装,结合国内的镜像源,下载速度很快)
conda install pandas
conda install xlwt

代码实现

读取dbf

from dbfread import DBFdbf_path = r'./data-use/test.dbf'  # 文件所在位置
table = DBF(dbf_path, encoding='utf-8')  # 读取dbf文件name = table.name  # 名称
encoding = table.encoding  # 编码
date = table.date  # 创建时间
field_names = table.field_names  # 字段名称列表(不包含FID)
header = table.header  # 文件头(元数据)
records = table.records  # 属性行
for record in records:print(record)table = table.deleted  # 假删除
for record in table:print(record)

dbf转xls

import dbfread as df
import pandas as pddbf_filename = r"./data-use/shp/test.dbf"  # dbf文件
xls_filename = r"./results/test.xls"  # 输出路径data = df.DBF(dbf_filename, encoding='utf-8')  # dbf编码为utf-8,如果编码错误可能会乱码
# data = df.DBF(dbf_file_name, encoding='GBK') # dbf编码为GBK,如果编码错误可能会乱码
data = pd.DataFrame(iter(data))
data.to_excel(xls_filename, index=False, encoding='gbk')  # 写入表格中
print('----处理完成----')
  • 效果预览

dbf转xls(批量)

这里可以转换的格式比较多样,调整下代码转xlsx、csv或者存入数据库中都是可以的哈。

import os
import pandas as pd
import dbfread as dffilter = ['.DBF', '.dbf']  # 设置过滤后的文件类型 当然可以设置多个类型def all_path(dirname):result = []  # 所有的文件for maindir, subdir, file_name_list in os.walk(dirname):print("提示:当前主目录", "1:", maindir)  # 当前主目录print("提示:当前主目录下的所有目录", "2:", subdir)  # 当前主目录下的所有目录# print("3:",file_name_list)  #当前主目录下的所有文件for filename in file_name_list:apath = os.path.join(maindir, filename)  # 合并成一个完整路径ext = os.path.splitext(apath)[1]  # 获取文件后缀 [0]获取的是除了文件名以外的内容# 设置过滤器,过滤不符合格式的文件if ext in filter:result.append(apath)return resultif __name__ == '__main__':input_file_path = r'./data-use/shp/'  # 输入路径output_file_path = r'./results/shp/'  # 输出路径if not os.path.exists(output_file_path):# os.mkdir创建一个,os.makedirs可以创建路径上多个os.makedirs(output_file_path)file_list = all_path(input_file_path)if len(file_list) > 0:for dbf_file_name in file_list:try:data = df.DBF(dbf_file_name, encoding='utf-8')except:# 如果报错尝试下面这一句try:data = df.DBF(dbf_file_name, encoding='GBK')except:print('该文件未进行处理', dbf_file_name)df_data = pd.DataFrame(iter(data))name = os.path.basename(dbf_file_name).split('.')[0]df_data.to_excel(output_file_path + name + '.xls', index=False, encoding='gbk')  # 写入表格中print('----已处理完成----')else:print('----该路径下无dbf文件----')

dbf入库Postgres

'''
Python连接Postgres依赖库 conda install psycopg2
'''
import psycopg2
from dbfread import DBFdef execute_sql(conn, sql):## 建立游标,用来执行数据库操作cursor = conn.cursor()## 执行SQL命令cursor.execute(sql)## 提交SQL命令conn.commit()# 关闭游标cursor.close()if __name__ == '__main__':dbf_path = r'./data-use/test.dbf'table = DBF(dbf_path, encoding='utf-8')table_sql = 'CREATE TABLE test_area(' # 建表SQL语句for field in table.fields:# print(field.name)  # 字段名称table_sql += field.nameif ('N' == field.type):table_sql += ' int,'  # N代表数值型int、float or None 这里可能会报错elif ('C' == field.type):table_sql += ' varchar(255),'  # 字符串类型table_sql = table_sql[: -1] + ')'## 连接到一个指定的数据库conn = psycopg2.connect(database="db_test", user="postgres", password="", host="127.0.0.1", port="5432")# execute_sql(conn, table_sql) # 执行建表语句insert_sql = "INSERT INTO test_area(" # 插入SQL语句for field_name in table.field_names:insert_sql += field_name + ','insert_sql = insert_sql[: -1] + ') values(' for record in table:insert_detail_sql = insert_sqlfor v in list(record.values()):if (int == type(v)):insert_detail_sql += '{},'.format(v)elif (str == type(v)):insert_detail_sql += "'" + v + "',"insert_detail_sql = insert_detail_sql[: -1] + ')'execute_sql(conn, insert_detail_sql)conn.close()

参考链接

  • https://blog.csdn.net/jhui123456/article/details/108046201

写在最后

 以上就是全部内容,推荐大家使用miniconda来管理Python环境,添加国内镜像源,下载速度很快。全部代码和示例数据已上传至码云仓库,欢迎大家下载查看。

https://gitee.com/fungiser/python-shapefile-operate/tree/develop/study-dbfread

python读取dbf文件、dbf转xls、入库Postgres相关推荐

  1. python 读取Excel文件(包括后缀为.xls与.xlsx)

    1.python 读取Excel文件(.xls文件) 导入的为xlrd 读取该sheet表中的值 import xlrd# 读取表格 def read_excel(book_data,sheet_da ...

  2. python 读取xlsx文件报错,解决方法 ( xlrd 2.0.1 仅支持 .xls 文件)

    一.问题: python读取xlsx文件报错,报错信息如下: 为什么会报错?那是因为xlrd 2.0.1 仅支持 .xls 文件. 二.解决方法: 1.确认自己安装的xlrd版本: 可以先用以下命令看 ...

  3. python读取nc文件数据生成专业气象图

    python读取nc文件数据生成专业气象图如色斑图.等值线.风向标,如下图所示: 代码如下: # -*- coding: utf-8 -*- """ Created on ...

  4. python可以读取excel文档吗_python打开excel文件【python读取excel文件如何进行】

    Python语言打开Excel文件? 一.安装xlrd模 到python官网下http://pypi.python.org/pypi/xlrd模块安装,前已经安装python 环境. 二.使用介 1. ...

  5. python读取Excel文件是报(xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; fo

    python读取Excel文件是报(xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; fo ...

  6. python之数据文件批量清洗,入库

    python之数据文件批量清洗,入库 因为最近有一个数据接入清洗的项目,别的工具用起来有些觉得不太顺手,就学着写了一个数据清洗入库的通用模板,节省一些工作量.主要流程为:数据库连接---文件批量导入- ...

  7. python 读取excel文件 效率 时间 格式_python读取Excel文件中的时间数据

    在使用python读取Excel文件中的时间格式,碰到的时间格式转换问题: 读取这样的表格: 输出这样的数据结果: 然而这样的结果却不是我们想要的,我们需要的是这样的结果: 1.安装python官方库 ...

  8. python读取一个文件夹/子文件夹下的所有文件名字

    python读取一个文件夹/子文件夹下的所有文件名字 示例代码: import osfile_path = './images/' all_file_name = os.listdir(file_pa ...

  9. python删除重复值所在的行数_使用python读取txt文件的内容,并删除重复的行数方法...

    注意,本文代码是使用在txt文档上,同时txt文档中的内容每一行代表的是图片的名字. #coding:utf-8 import shutil readDir = "原文件绝对路经" ...

  10. python读取txt文件并画图

    1,使用python读取txt文件 已知txt文件内容如下: 0 01 12 43 94 165 256 36 请以第一列为x轴,第二列为y轴画图 步骤如下: 1)使用readlines读取文件 2) ...

最新文章

  1. ora-1031解决一例
  2. JHipster生成微服务架构的应用栈(三)- 业务微服务示例
  3. 悲观锁和乐观锁_带你了解MySQL中的乐观锁与悲观锁
  4. 微信年终奖人均 280 万?拼多多再追平京东;苹果再三致谢腾讯 | 极客头条
  5. 12年前的 Linux bug 复活,DNS 缓存投毒攻击重现
  6. 零基础java自学流程-Java语言高级531
  7. php怎么将农历转换成公历,php 公历农历如何实现转换
  8. 服务器起到的是什么作用是什么,服务器的作用是什么
  9. 前端如何实现即时通信?
  10. 拥有这十种气质的女孩更有男人缘
  11. linux的cut命令详解
  12. vue3 +Element-puls ,table 中使用$refs修改scrollTop 到顶部
  13. [附源码]计算机毕业设计JAVA大学城二手书交易网站
  14. 激光雷达稀疏投影图插值
  15. TigerGraph 使用csv导入List 或Set 数据的format
  16. 基于PHP+MySQL保险业务管理系统的设计与实现
  17. [SDOI2010]粟粟的书架
  18. 毫米与像素之间的转换
  19. 谷歌浏览器Chrome插件扩展开发教程
  20. Python学习路线(免费课程大纲+Python视频教程+下载地址)

热门文章

  1. Video Moment Retrieval With Cross-ModalNeural Architecture Search
  2. Tigo与APsystems签署许可协议,并撤回专利侵权诉讼
  3. 51nod 3144 超级购物
  4. 解决谷歌翻译网域限制问题
  5. Android Edittext输入限制一位小数2位小数(n位)小数简单通用实现
  6. [原创]Enterprise Library深入解析与灵活应用(4):创建一个自定义Exception Handler改变ELAB的异常处理机制
  7. dxf的DIMSTY尺寸标注格式
  8. egg-mongoose的 update only works with $ operators报错
  9. EasyAR_遇到的各种问题
  10. php 局域网不能访问数据库服务器,phpstudy 局域网不能访问原因