こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

python プログラミング vim

#!/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)の計算した結果しか、ファイルに書き込まれてないのですが、
どうすれば、すべて反映されて、出力ファイルに結果が出せるのでしょうか。
よろしくお願いします。

投稿日時 - 2012-12-19 16:38:58

QNo.7852325

すぐに回答ほしいです

質問者が選んだベストアンサー

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

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

投稿日時 - 2012-12-19 17:23:14

補足

#!/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:33

お礼

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

投稿日時 - 2012-12-20 05:57:55

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

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

////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

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

投稿日時 - 2012-12-19 17:19:21

補足

#!/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:20

あなたにオススメの質問