4

次のようなファイルがあります。

1 1 C C 1.9873 2.347 3.88776

1 2 C Si 4.887 9.009 1.21

ファイルの内容を 1 行ずつ読み込んでいきたいと思います。私が使用した行に数字しかなかったとき:

for line in readlines(file):
    data = map(float, line.split)

ただし、これは line.split のすべての要素が数値の場合にのみ機能します。文字を文字列として、数字を浮動小数点数として保存するにはどうすればよいですか?

4

3 に答える 3

9
$ cat 1.py
def float_or_str(x):
  try:
     return float(x)
  except ValueError:
     return x

line = '1 1 C C 1.9873 2.347 3.88776'
print map(float_or_str, line.split())

$python 1.py
[1.0, 1.0, 'C', 'C', 1.9873, 2.347, 3.88776]
于 2012-06-19T21:13:13.643 に答える
1
for line in infile:
    data = [x if x.isalpha() else float(x) for x in line.split()]

データにアルファベットでも有効な浮動小数点数でもないフィールドが含まれている場合 (たとえば、「A1」)、問題が発生します。あなたのデータには、あなたが言ったことからこれらがないように見えますが、もしそうなら、try/exceptIgor によって提案されたアプローチがおそらくより適しているでしょう。

ただし、試行する型を指定できる、より一般的な関数を使用する可能性があります。

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()ます。)

于 2012-06-19T21:13:54.153 に答える
-1

メソッド str.isalpha()、str.isalphanum()、str.isdigit を使用して、文字列が数値かどうかを判断できます。

于 2012-06-19T21:15:04.143 に答える