下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

读取遍历dBASE或Xbase文件中的记录。从Python的序列创建DBF文件。

import struct,datetime,decimal,itertools

def dbfreader(f):

"""Returns an iterator over records in a Xbase DBF file.

The first row returned contains the field names.

The second row contains field specs: (type,size,decimal places).

Subsequent rows contain the data records.

If a record is marked as deleted,it is skipped.

File should be opened for binary reads.

"""

# See DBF format spec at:

# http://www.pgts.com.au/download/public/xbase.htm#DBF_STRUCT

numrec,lenheader = struct.unpack('

numfields = (lenheader - 33) // 32

fields = []

for fieldno in xrange(numfields):

name,typ,deci = struct.unpack('<11sc4xBB14x',f.read(32))

name = name.replace('\0','') # eliminate NULs from string

fields.append((name,deci))

yield [field[0] for field in fields]

yield [tuple(field[1:]) for field in fields]

terminator = f.read(1)

assert terminator == '\r'

fields.insert(0,('DeletionFlag','C',1,0))

fmt = ''.join(['%ds' % fieldinfo[2] for fieldinfo in fields])

fmtsiz = struct.calcsize(fmt)

for i in xrange(numrec):

record = struct.unpack(fmt,f.read(fmtsiz))

if record[0] != ' ':

continue # deleted record

result = []

for (name,deci),value in itertools.izip(fields,record):

if name == 'DeletionFlag':

continue

if typ == "N":

value = value.replace('\0','').lstrip()

if value == '':

value = 0

elif deci:

value = decimal.Decimal(value)

else:

value = int(value)

elif typ == 'D':

y,m,d = int(value[:4]),int(value[4:6]),int(value[6:8])

value = datetime.date(y,d)

elif typ == 'L':

value = (value in 'YyTt' and 'T') or (value in 'NnFf' and 'F') or '?'

elif typ == 'F':

value = float(value)

result.append(value)

yield result

def dbfwriter(f,fieldnames,fieldspecs,records):

""" Return a string suitable for writing directly to a binary dbf file.

File f should be open for writing in a binary mode.

Fieldnames should be no longer than ten characters and not include \x00.

Fieldspecs are in the form (type,deci) where

type is one of:

C for ascii character data

M for ascii character memo data (real memo fields not supported)

D for datetime objects

N for ints or decimal objects

L for logical values 'T','F',or '?'

size is the field width

deci is the number of decimal places in the provided decimal object

Records can be an iterable over the records (sequences of field values).

"""

# header info

ver = 3

now = datetime.datetime.now()

yr,mon,day = now.year-1900,now.month,now.day

numrec = len(records)

numfields = len(fieldspecs)

lenheader = numfields * 32 + 33

lenrecord = sum(field[1] for field in fieldspecs) + 1

hdr = struct.pack('

f.write(hdr)

# field specs

for name,(typ,deci) in itertools.izip(fieldnames,fieldspecs):

name = name.ljust(11,'\x00')

fld = struct.pack('<11sc4xBB14x',name,deci)

f.write(fld)

# terminator

f.write('\r')

# records

for record in records:

f.write(' ') # deletion flag

for (typ,value in itertools.izip(fieldspecs,record):

if typ == "N":

value = str(value).rjust(size,' ')

elif typ == 'D':

value = value.strftime('%Y%m%d')

elif typ == 'L':

value = str(value)[0].upper()

else:

value = str(value)[:size].ljust(size,' ')

assert len(value) == size

f.write(value)

# End of file

f.write('\x1A')

# -------------------------------------------------------

# Example calls

if __name__ == '__main__':

import sys,csv

from cStringIO import StringIO

from operator import itemgetter

# Read a database

filename = '/pydev/databases/orders.dbf'

if len(sys.argv) == 2:

filename = sys.argv[1]

f = open(filename,'rb')

db = list(dbfreader(f))

f.close()

for record in db:

print record

fieldnames,records = db[0],db[1],db[2:]

# Alter the database

del records[4]

records.sort(key=itemgetter(4))

# Remove a field

del fieldnames[0]

del fieldspecs[0]

records = [rec[1:] for rec in records]

# Create a new DBF

f = StringIO()

dbfwriter(f,records)

# Read the data back from the new DBF

print '-' * 20

f.seek(0)

for line in dbfreader(f):

print line

f.close()

# Convert to CSV

print '.' * 20

f = StringIO()

csv.writer(f).writerow(fieldnames)

csv.writer(f).writerows(records)

print f.getvalue()

f.close()

# Example Output

"""

['ORDER_ID','CUSTMR_ID','EMPLOY_ID','ORDER_DATE','ORDER_AMT']

[('C',10,0),('C',11,('D',8,('N',12,2)]

['10005 ','WALNG ','555 ',datetime.date(1995,5,22),Decimal("173.40")]

['10004 ','BMARK ','777 ',18),Decimal("3194.20")]

['10029 ','SAWYH ',6,29),Decimal("97.30")]

['10013 ','RITEB ',2),Decimal("560.40")]

['10024 ','RATTC ','444 ',21),Decimal("2223.50")]

['10018 ',12),Decimal("1076.05")]

['10025 ',23),Decimal("185.80")]

['10038 ','OLDWO ','111 ',7,14),Decimal("863.96")]

['10002 ','MTIME ','333 ',16),Decimal("731.80")]

['10007 ','MORNS ',24),Decimal("1405.00")]

['10026 ',26),Decimal("17.40")]

['10030 ','LILLO ',3),Decimal("909.91")]

['10022 ','LAPLA ',19),Decimal("671.50")]

['10035 ','HIGHG ',11),Decimal("1984.83")]

['10033 ','FOODG ',6),Decimal("3401.32")]

--------------------

['CUSTMR_ID',2)]

['MORNS ',Decimal("17.40")]

['SAWYH ',Decimal("97.30")]

['WALNG ',Decimal("173.40")]

['RATTC ',Decimal("185.80")]

['RITEB ',Decimal("560.40")]

['LAPLA ',Decimal("671.50")]

['MTIME ',Decimal("731.80")]

['OLDWO ',Decimal("863.96")]

['LILLO ',Decimal("909.91")]

['RATTC ',Decimal("1076.05")]

['MORNS ',Decimal("1405.00")]

['HIGHG ',Decimal("1984.83")]

['BMARK ',Decimal("3194.20")]

['FOODG ',Decimal("3401.32")]

....................

CUSTMR_ID,EMPLOY_ID,ORDER_DATE,ORDER_AMT

MORNS,555,1995-06-26,17.40

SAWYH,777,1995-06-29,97.30

WALNG,1995-05-22,173.40

RATTC,444,1995-06-23,185.80

RITEB,1995-06-02,560.40

LAPLA,111,1995-06-19,671.50

MTIME,333,1995-05-16,731.80

OLDWO,1995-07-14,863.96

LILLO,1995-07-03,909.91

RATTC,1995-06-12,1076.05

MORNS,1995-05-24,1405.00

HIGHG,1995-07-11,1984.83

BMARK,1995-05-18,3194.20

FOODG,1995-07-06,3401.32

"""

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

python数据库编程dbf_python读写dbf文件相关推荐

  1. python导入excel文件-python使用xlrd模块读写Excel文件的方法

    本文实例讲述了python使用xlrd模块读写Excel文件的方法.分享给大家供大家参考.具体如下: 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi ...

  2. python数据库编程(1):潦草的开篇

    一.前言 关于数据库编程,涉及知识点广而杂,所以我并非一遍就能掌握,这里汲取了我的实践和认识,算是对python数据库编程的做一个铺垫吧.在以后的学习过程中会不断地完善数据库编程的知识点,鉴于此,另当 ...

  3. Python使用openpyxl模块读写excel文件

    Python使用openpyxl模块读写excel文件 openpyxl是一个用于写入和读取xlsx格式的excel文件的Python模块. excel2010后的后缀名为xlsx,不再是xls,使用 ...

  4. Python数据库编程pymysql

    Python数据库编程pymysql 一.数据库编程介绍 数据库编程就是针对数据库的操作,通过编写程序的方式,让程序做为数据库的客户端进行数据库操作. 对于MySQL的操作我们可以通过SQL语句,但是 ...

  5. python数据库编程dbf_如何使用Python dbf库读取和创建新的foxpro2.6数据库表

    库版本:dbf 0.97.0,python版本3.5.5 我试图用dbf库创建一个新的foxpro2.6.DBF文件.我跑>>> import dbf >>> ta ...

  6. python数据存储系列教程——python(pandas)读写csv文件

    全栈工程师开发手册 (作者:栾鹏) python教程全解 CSV文件的规范 1.使用回车换行(两个字符)作为行分隔符,最后一行数据可以没有这两个字符.2.标题行是否需要,要双方显示约定3.每行记录的字 ...

  7. Python开发 之 Python3读写Excel文件(较全)

    Python3读写Excel文件 1.Python中几种常用包比较 2.用xlrd包读取Excel文件 2.1.用法 2.1.1.引用包 2.1.2.打开文件 2.1.3.获取你要打开的sheet文件 ...

  8. 用javadbf从数据库导出数据成dbf文件

    前一个星期碰到一个需求,是这样的: 本地系统有一张表,用于存放一种病人文书的记录,类似于一张病人信息登记表,需要将这个一定时间段内的数据,导出成dbf文件 碰到需求的时候,我在像dbf文件是个啥玩意儿 ...

  9. java dbf文件_Java读写dbf文件

    展开全部 Java读取DBF文件,需要加载开源jar包JavaDBF.jar,然后使用62616964757a686964616fe4b893e5b19e31333337613133里面的方法进行读写 ...

最新文章

  1. 华岩资本--微生物领域项目投递通道
  2. 删不干净_华为手机照片删了又删,内存还是严重告急,终于知道是为什么了!...
  3. 【2017-05-30】WebForm文件上传。从服务端删除文件
  4. 微型计算机的外存储器可与 直接打交道,微型计算机的外存储器可与( )直接打交道。...
  5. Pentest Box -windows平台的linux bash,集成了很多测试工具
  6. OpenCV移植各向异性图像分割间隙流体的实例(附完整代码)
  7. *【2019牛客暑期多校训练营(第三场)- G】Removing Stones(分治)
  8. 联通sgip协议 java socket_sgip12 个人编写的 联通SGIP协议基于 socket 方式实现 源 联合开发网 - pudn.com...
  9. 去过印度的人评价印度_印度的学生如何开始使用开源
  10. maven项目没有src/test/java和src/test/resources目录问题解决
  11. linux内核怎么变化,Linux内核中CPU状态变化机制简介
  12. 动软代码生成器连不上高版本(8.0+)的解决方法
  13. excel数据分析 - 10个数据透视表的优化技巧
  14. iOS手机模拟器配置
  15. 订单管理_01新增订单信息流程
  16. 数字证书理解(CA证书签名原理)
  17. 对接丰网查询物流信息
  18. 树梅派搭建MPI集群
  19. MATLAB长除法求z变换逆变换
  20. 图像分辨率+像素+尺寸+文件内存大小

热门文章

  1. 如何利用OpenCV自带的级联分类器训练程序训练分类器
  2. 链接器怎样使用静态库来解决符号引用
  3. 咨微关于企业信息门户的设想
  4. C++知识回顾之__stdcall、__cdcel和__fastcall三者的区别
  5. ESP32 OTA 策略的优点与可能的问题
  6. nrf51822蓝牙学习笔记之实例分析PPI和SHORT
  7. stm32 IAP在线升级的个人经验以及实现方法
  8. 使用WinSCP上传文件到指定服务器
  9. 渲染管道(1)整体流程
  10. Hyperledger Fabric 核心模块(2)configtxgen configtx.yaml配置文件