有没有一种方法可以使用 dbf 到 csv python 库 dbf 由 ethanfurman 替换和 trim 个别字段中的值?
Is there a way to replace and trim values in individual fields using the dbf to csv python library dbf by ethanfurman?
我正在使用 Ethan Furman 的 python 库 dbf 将许多 dbf 文件转换为 csv。它为此非常有效。我想在转换过程中进一步编辑一些字段,但不确定如何操作。具体来说,我想将仅包含 1 个或多个空格的字符串字段替换为空字符串(例如,“”替换为“”),并将包含“00000000”的日期字段替换为空字符串“”。如果有人能描述如何在转换过程中编辑字段并写出更新的记录,我将不胜感激。显然,我可以编写一个简单的辅助脚本来编辑转换期间输出的 csv 文件,但如果可能的话,我想一步完成。这是我用来转换文件的代码:
import csv
import dbf
import os
import sys
folder=sys.argv[1]
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
if filename.endswith('.DBF'):
db=dbf.Table(filename, ignore_memos=True)
db.open()
csv_fn = filename[:-4]+ ".csv"
dbf.export(db, filename=csv_fn, format='csv', header=True)
默认情况下,当使用 dbf table 时,返回的数据类型很简单——即 int
、str
、bool
、datetime.datetime
、等。但是您可以创建自己的数据类型,并通过在 default_data_types
参数中指定它们来使用它们:
db = dbf.Table(
filename,
ignore_memos=True,
default_data_types={
'C': my_white_space_stripping_data_type,
'D': my_empty_date_str_data_type,
},
)
幸运的是,dbf
已经带有四种增强的数据类型:
Char
-- 自动去除尾随白色space,并忽略尾随白色space进行比较
Logical
-- 支持True
、False
、None
(字段值不存在时返回None
对或错——我见过 ?
、' '
和其他奇怪的垃圾)
Date
-- 支持空日期,如00000000
,显示为''
DateTime
-- 支持空的date/time,显示为''
通常,如果您使用一种增强的数据类型,您可能需要所有这些,因此您可以传递一个字符串而不是字典:
db = dbf.Table(
filename,
ignore_memos=True,
default_data_types='enhanced',
)
现在,当导出 csv 文件时,尾随的白色 -space 会被删除,空的日期字段会变成 ''
.
请记住,空逻辑字段将变为 '?'
而不是 ''
,因此您可能需要更长的形式,将 dict
指定为 default_data_types
并且仅覆盖 C
和 D
.
我正在使用 Ethan Furman 的 python 库 dbf 将许多 dbf 文件转换为 csv。它为此非常有效。我想在转换过程中进一步编辑一些字段,但不确定如何操作。具体来说,我想将仅包含 1 个或多个空格的字符串字段替换为空字符串(例如,“”替换为“”),并将包含“00000000”的日期字段替换为空字符串“”。如果有人能描述如何在转换过程中编辑字段并写出更新的记录,我将不胜感激。显然,我可以编写一个简单的辅助脚本来编辑转换期间输出的 csv 文件,但如果可能的话,我想一步完成。这是我用来转换文件的代码:
import csv
import dbf
import os
import sys
folder=sys.argv[1]
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
if filename.endswith('.DBF'):
db=dbf.Table(filename, ignore_memos=True)
db.open()
csv_fn = filename[:-4]+ ".csv"
dbf.export(db, filename=csv_fn, format='csv', header=True)
默认情况下,当使用 dbf table 时,返回的数据类型很简单——即 int
、str
、bool
、datetime.datetime
、等。但是您可以创建自己的数据类型,并通过在 default_data_types
参数中指定它们来使用它们:
db = dbf.Table(
filename,
ignore_memos=True,
default_data_types={
'C': my_white_space_stripping_data_type,
'D': my_empty_date_str_data_type,
},
)
幸运的是,dbf
已经带有四种增强的数据类型:
Char
-- 自动去除尾随白色space,并忽略尾随白色space进行比较Logical
-- 支持True
、False
、None
(字段值不存在时返回None
对或错——我见过?
、' '
和其他奇怪的垃圾)Date
-- 支持空日期,如00000000
,显示为''
DateTime
-- 支持空的date/time,显示为''
通常,如果您使用一种增强的数据类型,您可能需要所有这些,因此您可以传递一个字符串而不是字典:
db = dbf.Table(
filename,
ignore_memos=True,
default_data_types='enhanced',
)
现在,当导出 csv 文件时,尾随的白色 -space 会被删除,空的日期字段会变成 ''
.
请记住,空逻辑字段将变为 '?'
而不是 ''
,因此您可能需要更长的形式,将 dict
指定为 default_data_types
并且仅覆盖 C
和 D
.