使用 Python 2.6,我正在尝试处理越来越多的格式(xls、csv、shp、json、xml、html 表数据)的表,并将内容输入到 ArcGIS 数据库表中(请留在我身边,这是更多关于过程的python部分而不是GIS部分)。在当前设计中,我的基类格式化目标数据库表并使用源格式的内容填充它。子类目前设计用于将内容输入字典,以便基类可以处理内容,无论源格式是什么。
问题是我的用户可能会将这些格式中的任何一种格式的文件或表格输入到脚本中,因此子类将在运行时最佳地确定。除了运行一个真正涉及的 if-elif-elif-... 块之外,我不知道如何做到这一点。结构看起来像这样:
class Input:
def __init__(self, name): # name is the filename, including path
self.name = name
self.ext = name[3:]
d = {} # content goes here
... # dictionary content written to database table here
# each subclass writes to d
class xls(Input):
...
class xml(Input):
...
class csv(Input):
...
x = Input("c:\foo.xls")
y = Input("c:\bar.xml")
我对鸭子类型和多态性的理解表明这不是解决问题的方法,但我很难找到更好的设计。这方面的帮助会有所帮助,但我真正想要的是如何转换x.ext
或y.ext
转换为确定子类(以及输入处理)的分叉。
如果有帮助,假设foo.xls
和bar.xml
具有相同的数据,因此x.d
和y.d
最终将具有相同的项目,例如{'name':'Somegrad', 'lat':52.91025, 'lon':47.88267}
.