電子書籍の厳選無料作品が豊富!

#!/usr/bin/env python
#vim: fileencoding=utf-8
from math import*
import sys
outfp=open('test.dat','w')
outfq=open('ab.dat','w')
for line in open('para.dat','r'):
items=line.split('\t')
s=2/float(items[0])
u=float(items[1])-5+log(s/100)

outfp.write(str(s))
outfq.write(str(u))

outfp.close()
outfq.close()

////para.dat////
1 2
1 3

として、プログラムを実行したのですが、ファイルに出力した時に、
para.datの2列目(1 3)の計算した結果しか、ファイルに書き込まれてないのですが、
どうすれば、すべて反映されて、出力ファイルに結果が出せるのでしょうか。
よろしくお願いします。

A 回答 (2件)

どうやって確認しましたか?



writeはprintと違って改行や空白が入らずに出力されます。

手許のだと
test.dat
2.02.0
(最後に改行無し)

ab.dat
-6.91202300543-5.91202300543
(最後に改行無し)
となります。
前半の 2.0 -6.91202300543 が1 2、 後半の2.0 -5.91202300543 が1 3の計算結果です。
これは、プログラムに書かれた通りに実行されている「正しい動作」です。



あと、ここのQAでは空白がまとめられる、というPythonにとっては致命的な特徴があるの、まとめられない別の文字(全角空白など)に置き換えて書くようにしてください。インデントが変わると、ブロック構成に間違いがあってもわからないくなります。

この回答への補足

#!/usr/bin/env python
#vim: fileencoding=utf-8
from math import*
import sys
outfp=open('test.dat','w')
outfq=open('ab.dat','w')
for line in open('para.dat','r'):
items=line.split('\t')
s=2/float(items[0])
u=float(items[1])-5+log(s/100)

outfp.write(str(s))
outfq.write(str(u))

outfp.close()
outfq.close()

////para.dat////
1 2
1 3
すみません。インデントを施したものを示しました。また、確認は、ターミナルで vi ab.datで確認しました。
これだと、2列目の結果しか反映されません。おねがいします。

補足日時:2012/12/19 23:32
    • good
    • 0
この回答へのお礼

すみません。インデントをうまくとるとできました。ありがとうございました。

お礼日時:2012/12/20 05:57

このプログラムをそのまま実行すると以下のようになりますが、



////ab.dat////
-6.91202300543-5.91202300543

////test.dat////
2.02.0

outfp.write(str(s) + "\n")
outfq.write(str(u) + "\n")
と変更すると、

////ab.dat////
-6.91202300543
-5.91202300543

////test.dat////
2.0
2.0

求める結果はこういうことでしょうか?

この回答への補足

#!/usr/bin/env python
#vim: fileencoding=utf-8
from math import*
import sys
outfp=open('test.dat','w')
outfq=open('ab.dat','w')
for line in open('para.dat','r'):
あああitems=line.split('\t')
s=2/float(items[0])
u=float(items[1])-5+log(s/100)

outfp.write(str(s))
outfq.write(str(u))

outfp.close()
outfq.close()

上の補足を間違えてしまいました。こちらで、確認してください。


////para.dat////
1 2
1 3

補足日時:2012/12/19 23:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!