我想尝试推断字符串中的数据类型。
场景:
我有一个包含数据行的 CSV 文件,我想将这些数据存储在数据库中。
我不想将所有字段都存储为字符串。
由于 CSV 中的字段可能会更改,因此我无法假设它们的类型。
示例(CSV 文件):
[Row 1 - column names] --> "name", "age" , "children"
[Row 2 - data row ] --> "John", "45.5", "3"
...
[Row n - data row ] --> ...
在这种情况下,通过查看行中的数据,我想推断这name
是一列字符串,age
一列浮点数,children
一列整数。
我的尝试:
最简单的方法是尝试转换,并在某个转换成功时决定类型。
我为此目的编写了一个方法,如下所示:
def deduceType(str):
try:
#first try to convert to int:
int(str)
return 0 #integer
except ValueError:
try:
#not integer, try float:
float(str)
return 1 #float
except ValueError:
#not float, so deduct string
return 2 #string
我的问题:
问题是,如果我希望能够推导出更多数据类型(布尔值、长整数、无符号数字类型等),那么这种方法会变得麻烦且不准确。
有没有更整洁、更高效、更严谨的方法来做到这一点?
答案(编辑):
基于 Martijn Pieters 的回答,我正在这样做:
def deduceType(str):
try:
return type(ast.literal_eval(str))
except ValueError:
return type('') #string