0

下手なタイトルですみません、本当に適切なタイトルが思いつきません。

これが私の問題です。文字列のリストが与えられたとしましょう:

['2010.01.01',
'1b',
'`abc'
'12:20:33.000']

そして、「型チェック」を実行して、最初の文字列が日付型、2 番目の文字列がブール値、3 番目の文字列がシンボル、4 番目の文字列を返すようにしたいと考えています。私がやりたいのは、正しい ctypes をキャストすることです。

それを行う方法はありますか?

ps: 私の python は 2.5 です

4

2 に答える 2

0
>>> str = ['2010.01.01',
... '1b',
... '`abc'
... '12:20:33.000']
>>> [type(x) for x in str]
[<type 'str'>, <type 'str'>, <type 'str'>]

このリストを決定するために eval を使用するとします。

于 2013-01-23T08:00:19.793 に答える
-1

コンテンツを信頼できると完全に確信している場合、たとえば、何らかの方法でコードをリストに忍び込ませることができるユーザーからのものではない場合、リストをevalにマップできます。これにより、数値などのネイティブ型がキャッチされます。ただし、これらの文字列がすべて何を意味するかを知る簡単な方法はありません。たとえば、「2010.01.01」を evel しようとすると、Python は数値を解析しようとしていると判断し、小数点以下が余分にあるために失敗します。

したがって、2 段階の戦略を試すことができます。最初に、eval を使用してリストを文字列と数値にキャストします。

def try_cast (input_string):
    try:
        val = eval(input_string)
        val_type = type(val)
        return val, val_type
    except:
        return input_string, type('')

cast_list = map (try_cast, original_list)

これにより、2 番目の項目が型で、最初の項目が変換された項目であるタプルのリストが得られます。日付などのより特殊なものについては、最初のパスの後に残った文字列に対して同じ戦略を使用する必要があります。期待する時刻形式を把握し、それぞれの解析式を生成する必要があります (python ドキュメントまたはhttp://www.tutorialspoint.com/python/time_strptime.htmのようなものを確認できます) 。すべてのオプションを試して、どのオプションが正しく変換されたかを確認します。1 つが機能した場合、値は日付です。そうでない場合は、単なる文字列です。

于 2013-01-22T18:59:16.677 に答える