文字列内のデータ型を推測してみたいと思います。
シナリオ:
データの行を含む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
私の質問:
問題は、より多くのデータ型(ブール値、long型、符号なし数値型など)を推測できるようにしたい場合、このアプローチは煩雑で不正確になることです。
これを行うためのよりきちんとした、より効率的で厳密な方法はありますか?
回答(編集):
Martijn Pietersの回答に基づいて、私はこれを行っています:
def deduceType(str):
try:
return type(ast.literal_eval(str))
except ValueError:
return type('') #string