2016-03-24 10 views
0

私は持っている一連のサブディレクトリをループし、それらのサブディレクトリのそれぞれからデータファイルを抽出するpythonスクリプトを開発しようとしています。私のサブディレクトリはそれぞれ、対応する時間の名前が付けられています。しかし、問題は、整数サブディレクトリが小数点なしで(例えば5)リストされ、非整数サブディレクトリが小数点でリストされることである。したがって、正しいサブディレクトリを見つけるために、私のループは数値型に非常に敏感です。それとPythonで.is_integer()を使用する際のトラブル

、私は、Pythonでis._integer()メソッドを使用しようとしてきたが、私はこのエラーを取得しておいてください。

'int' object has no attribute 'is_integer' 

私は次のコードを実行すると:

def frange(x, y, jump): 
    while x < y: 
     yield x 
     x += jump 

time=15 

for i in frange(0,time,0.1): 
    float(i)  
    print (i).is_integer() 

でも私はブルートを使って私のループ変数を浮動小数点にすることができます!助けてください。

+0

と印刷(i.is_integer)、(i)を印刷しないだから、どちらかが戻ってiからfloat(i)のrestultを割り当てます.is_integer – chapelo

+0

ありがとうございました! – electriclady

答えて

1

は、理由はあなたが(i).is_integer()の使用前にfloat(i)iをキャストという事実にもかかわらず、それはfloatiの変数の型を変異させていなかったということですprint(float(i).is_integer())

を試してみてください。

+0

ありがとうございます! – electriclady

0

変数にキャスト値を代入しません。これは動作するはずです:

def frange(x, y, jump): 
    while x < y: 
     yield x 
     x += jump 

time=15 

for i in frange(0,time,0.1): 
    x = float(i)  
    print (x).is_integer() 
+0

これらの提案はすべて機能します(ありがとう!)。しかし、今、私はこのような私のコードをした:FRANGE(0、時間、0.1)でiに対する : のx =フロート(I) プリントのx プリント(x)の.is_integer() 'コード」 のみを値は0.1の増分で15の時間になっても、私は整数が "0.0"で、それ以外は何も表示されません。思考? – electriclady

+0

ありがとうございます! – electriclady

1
float(i) 

これはfloat型に引数iを変換しますが、その結果が返されます。変数iは変更されません。したがって、その呼び出しは単に破棄されます。

そして、最初の反復でi0であり、整数オブジェクトはis_integerメソッドではありません。

for i in frange(0, time, 0.1): 
    i = float(i) 
    print (i).is_integer() 

を...またはfrangeのみ山車を返すことを確認してください:

def frange(x, y, jump): 
    x = float(x) 
    while x < y: 
     yield x 
     x += jump 
+0

これらの提案はすべて機能します(ありがとう!)。しかし、今、私はこのように私のコードをした: 'コード ' iに対するFRANGE(0、時間、0.1)中: のx =フロート(I) プリントのx プリント(x)の.is_integer() 'コード' と整数を持っていると私に言っている唯一の値は "0.1"であり、0.1の増分で15の時間に上がっています。思考? – electriclady

+1

それは浮動小数点演算だからです。[この質問](http:// stackoverflowを参照してください。com/q/588004/216074)。 – poke

+0

しかし、私が.is_integer()を使用している理由は、浮動小数点演算で働いていると考えたからです。 – electriclady

関連する問題