for line in infile:
data = [x if x.isalpha() else float(x) for x in line.split()]
データにアルファベットでも有効な浮動小数点数でもないフィールドが含まれている場合 (たとえば、「A1」)、問題が発生します。あなたのデータには、あなたが言ったことからこれらがないように見えますが、もしそうなら、try/except
Igor によって提案されたアプローチがおそらくより適しているでしょう。
ただし、試行する型を指定できる、より一般的な関数を使用する可能性があります。
def tryconvert(value, *types):
for t in types:
try:
return t(value)
except (ValueError, TypeError):
continue
return value
for line in infile:
data = [tryconvert(x, int, float) for x in line.split()]
これは、整数に変換されるものを に変換し、int
を試行することに失敗しfloat
、最後にあきらめて元の値を返します。これは文字列になることがわかっています。(文字列であることがわからない場合は、str
への呼び出しの最後に貼り付けることができtryconvert()
ます。)