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

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

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

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

Q&A

解決済

1回答

7764閲覧

write()の中のsep=''に対しエラーがでている

gunmed

総合スコア55

Python 3.x

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

0グッド

1クリップ

投稿2019/01/15 04:27

write()のファイルを書き込みたい

練習としてab.pyというファイルに書き込みをするためにコードを書いたのですが、write()のなかのsep=''にエラーが出てしまいます。
そこで、書き方を + を用いた方法で行うと実行できます。
何がいけないのか理由がわからないので、教えていただけると幸いです。

発生している問題・エラーメッセージ

f.write(key, 'は', str(value), sep='') TypeError: write() takes no keyword arguments

該当のソースコード

python3

1stationery = {'ボールペン': 22, 2 'ノート': 31, 3 'のり': 8, 4 'セロハンテープ': 24, 5 'ホッチキス': 7 6 } 7with open('10004/ab.py', 'w', encoding='utf-8') as f: 8 for key, value in stationery.items(): 9 f.write(key, 'は', str(value), sep='') 10 f.write('\n') 11print('書き込み完了')

試したこと

stationery = {'ボールペン': 22, 'ノート': 31, 'のり': 8, 'セロハンテープ': 24, 'ホッチキス': 7 } with open('10004/ab.py', 'w', encoding='utf-8') as f: for key, value in stationery.items(): f.write(key + 'は' + str(value)) f.write('\n') print('書き込み完了')

上記だとエラーはでませんでした。

補足情報(FW/ツールのバージョンなど)

visual studio code
mac iOS 10.14.1

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

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

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

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

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

tiitoi

2019/01/15 04:42

write(string) は文字列の引数を1つしかとらないので、f.write(key, 'は', str(value), sep='') のような引数の指定はできません。
gunmed

2019/01/15 05:37

そうだったのですね。勉強になりました。 回答ありがとうございます。
guest

回答1

0

ベストアンサー

きっとprintあたりと同じだと思っているのだと思いますが、関数・メソッドごとに引数の仕様は違います。

リファレンスマニュアルを確認すればすぐにわかります。

https://docs.python.jp/3/library/functions.html#print
https://docs.python.jp/3/library/io.html#io.TextIOBase.write

投稿2019/01/15 05:15

編集2019/01/15 06:18
hayataka2049

総合スコア30933

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

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

gunmed

2019/01/15 06:40 編集

回答ありがとうございます。リファレンスファニュアルを読んで、色々試していたので、返信が遅れてしまいました。最終的に、print()ではsep=''やend=''などを用いることでwrite()と同じようにファイルに書き込めるという理解をして、実際に実行までできました。 しかし、以下のことが疑問になってしまったので、もしよかったら回答していただけますでしょうか。 write()には文字列のみしか入れられないと書いてありました。そこで今勉強している教材をみると、'\n'はwrite()に入れられるとなっていました。'\n'は''で挟まれているので文字列として認識されて関数に入れられるが、sep=''は文字列ではないので入れられないという理解で大丈夫でしょうか? また、そもそもsep=''はprint()のみに使われる引数ものなので他の関数には使えない(もちろんwrite()含め)ということでしょうか?
hayataka2049

2019/01/15 06:42 編集

>print()ではsep=''やend=''などを用いることでwrite()と同じようにファイルに書き込める いえ、printの場合はデフォルトではコンソール画面(厳密には標準出力)に出力します。ファイルには書き込まれません。どうしてもprintでファイル出力したい場合は、file引数を使えばできますが。 >write()には文字列のみしか入れられないと書いてありました。そこで今勉強している教材をみると、'\n'はwrite()に入れられるとなっていました。'\n'は''で挟まれているので文字列として認識されて関数に入れられるが、sep=''は文字列ではないので入れられないという理解で大丈夫でしょうか? '\n'は改行1文字の文字列です。また、もしかしたら勘違いしているかもしれないので書いておくと、pythonでは「文字列リテラル」を並べて書くと1つの文字列に結合されるという仕様があります。 >>> print("hoge" "\n" "fuga") hoge fuga 引数が複数あるように見えるかもしれませんが、これはあくまでも1つの引数として受け取られます。引数リストはカンマで区切られます。 また、この仕様は「文字列リテラル」に対してのみ働き、変数に代入された文字列などでは使えません。 >また、そもそもsep=''はprint()のみに使われる引数ものなので他の関数には使えない(もちろんwrite()含め)ということでしょうか? はい、そのとおりです。
gunmed

2019/01/15 07:18

丁寧な回答ありがとうございます。 print(key, 'は', str(value), file = f,sep='',end='') このようにflie = f がfile引数としてやるとwrite()のようにファイル出力できました。 file引数の説明が書いてなかったので、自分なりに解釈してやってみました。 ありがとうございます。 \nなどにまだ慣れてないので丁寧な説明でよくわかりました。文字列リテラルを並べると結合され、一つの引数になるんですね。 わかりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問