質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

1524閲覧

sys.stdout.write()の内容をファイルに書き込み

rainrain

総合スコア31

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/06/30 08:44

###質問
sys.stdout.writeで端末に表示させているデータを、プログラムの中で直接csvファイルに書き込みたいのですが、可能でしょうか?

ーーーーーーーーーーーーーーーーー
f=open(output_file,"w")

print(gaze, sep=',',end='',file=f)

f.close()

ーーーーーーーーーーーーーーーーー

は、ありなのに、

ーーーーーーーーーーーーーーーーー
f=open(output_file,"w")

sys.stdout.write((str)(gaze)+ ", ",file=f)

f.close()
ーーーーーーーーーーーーーーーーー
が出来ない

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tachikoma

2018/06/30 11:20 編集

標準出力に書き出したいのか、ファイルに書き出したいのかどちらでしょう?両方ですか?
rainrain

2018/07/01 06:09

ファイルです!
guest

回答3

0

ベストアンサー

sys.stdoutもファイルオブジェクトも_io.TextIOWrapperという型で、同じメソッドを呼べるので、

python

1f=open(output_file,"w") 2f.write(str(gaze)+ ", ") 3f.close()

でいいと思います。

たまに

python

1f = open('outputfile', 'w') 2sys.stdout = f

という方法を紹介しているネット記事もあり、こうすると以降のprint等がすべてファイルに吐き出せますが、あまり良い方法とは思えません。でも紹介はしておきます。

ちなみに、これをやってから元に戻したくなったら、

python

1sys.stdout = sys.__stdout__

ってすれば良いです。

投稿2018/06/30 12:25

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rainrain

2018/06/30 12:42

回答ありがとうございます! 昼から今まで永遠と悩んでいた問題が、かなり解消されました! あと1つだけお聞きしたいです。 今、for文でf.write(str(gaze)+ ", ")を回しているんですけど、途中で改行を挟むことは可能でしょうか? どういうことかというと、 for1 ・・・ for2 ・・・ f.write(str(gaze)+ ", ") みたいな感じで、for1の中でfor2を回しているんですけど、 for2の1週目で、1,2,3とファイルに書き込まれて、 for2の2週目で、4,5,6書き込まれるとすると、 今のままだとファイルには、1,2,3,4,5,6と書き込まれてしまうんですけど、これを 1,2,3 4,5,6 とする方法はありますでしょうか? このプログラムだと難しいのでしょうか、、、
hayataka2049

2018/06/30 12:58 編集

for2の1週目、2週目というのを文字通り受け取って良いかどうか悩むので、適当に短いコードで示してください。コメント欄に書くなら、インデントを全角スペースで書くと崩れずに表示できます
rainrain

2018/07/01 06:33 編集

for i in range(...)  ・・・A   ×××××   ×××××   for j in range(...)  ・・・B     ×××××     ×××××     f.wright(str(gaze)+ ", ")     m += 1   n += 1 このような形でAのループの中のBのループで書き込みを行っています。 うまく書き込むこと自体はできてるんですけど、このやり方だとファイルの1行目に横並びに書き込まれ続けるので、A1週目はファイルの1行目に、A2週目では2行目に書き込まれるようにしたいです。
rainrain

2018/07/01 06:32 編集

Bのループを抜け出て、1行書き込んだ後に改行を入れることってできるんでしょうか? f.write(\n) みたいな、、、
hayataka2049

2018/07/01 08:45

for i in range(...)  ・・・A   ×××××   ×××××   for j in range(...)  ・・・B     ×××××     ×××××     f.write(str(gaze)+ ", ")     m += 1   f.write("\n")   n += 1 とかでしょうか
guest

0

プログラムの中で・・・という条件からは外れますが、標準出力からのリダイレクトを使う方法を下記に示します。

標準出力の内容をファイルに出力したいようなので、ここでは端末の仕組みを使うことを考えてはいかがでしょうか。具体的には、書き出したい内容をすべて標準出力に書き出します。printをそのまま使うだけです(デフォルトで標準出力に書き出すため)。

sample.py

python

1print(gaze, sep=',',end='')

としておいて、端末側で実行してみます。

bash

1python sample.py

こうすると、端末に結果が表示されると思います。この結果をファイルにリダイレクトします。

bash

1python sample.py > result.csv

すると、端末に表示されていた内容をresult.csvに出力することができます。ファイルに書き込みたくない内容で端末に表示させたい内容は、標準エラー出力(sys.stderr)を使うといいです。

投稿2018/06/30 11:38

編集2018/07/01 06:17
tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PythonでCSVの読み書き を参考にされては?

投稿2018/06/30 08:48

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問