5

文字列が保持するデータ型を理解する方法はありますか...質問はほとんど論理的ではありませんが、以下のケースを参照してください

varname = '444'
somefunc(varname) => int

varname = 'somestring'
somefunc(varname) => String

varname = '1.2323'
somefunc(varname) => float

私の場合:リストに混合データを取得しますが、それらは文字列形式です。

myList = ['1', '2', '1.2', 'string']

それぞれの比較を追加できるように、彼らのデータを理解するための一般的な方法を探しています。それらはすでに文字列形式に変換されているため、リスト(myList)を混合データとして呼び出すことはできません...しかし、まだ方法はありますか?

4

3 に答える 3

15
from ast import literal_eval

def str_to_type(s):
    try:
        k=literal_eval(s)
        return type(k)
    except:
        return type(s)


l = ['444', '1.2', 'foo', '[1,2]', '[1']
for v in l:
    print str_to_type(v)

出力

<type 'int'>
<type 'float'>
<type 'str'>
<type 'list'>
<type 'str'>
于 2013-07-12T22:04:14.293 に答える
8

ast.literal_eval() と type() を使用できます。

import ast
stringy_value = '333'
try:
    the_type = type(ast.literal_eval(stringy_value))
except:
    the_type = type('string')
于 2013-07-12T22:01:23.093 に答える
1

正しい順序で、さまざまなタイプを試してみます。

>>> def detect(s):
...     try:
...         return type(int(s))
...     except (TypeError, ValueError):
...         pass
...     try:
...         return type(float(s))
...     except (TypeError, ValueError):
...         pass
...     return type(s)
... 
>>> detect('3')
<type 'int'>
>>> detect('3.4')
<type 'float'>
>>> detect('foo')
<type 'str'>
于 2013-07-12T22:02:35.947 に答える