2017-11-22 18 views
1

次のループを.txtファイルに書き込もうとしています(出力を端末に出力するだけでなく)。複数の引数を持つ.write関数を使用してtxtファイルに書き込む - Python

> TypeError:function takes exactly 1 argument (2 given) 

を私はエラーが伝えるしようとしているのか理解が、これを回避する方法がある。そうすることで、私はというエラーを取得します。私のpython 2.7

+1

'out_write.write' –

+2

単一の文字列(あなたがそれをしたいしかし作る( '{} {}' 形式(ラベル[ARR]結果[ARR])が。):連結、 '%を' 、 '.format()'、f-strings) '.write()'への2つの呼び出しを使用してください – kindall

答えて

3
で働いています

out_write = open(write_to, 'wb') 

for arr in top_k: 
    print(labels[arr], results[arr]) 
    out_write.write(labels[arr], results[arr]) 
print ("\n\n\n") 
out_write("\n\n\n") 
out_write.close() 

を:私は、私が使用していたコードである彼らはここで、端末

に印刷されているだけのよう.txtファイルにラベルと結果の出力が必要なのか

Pythonはこの問題に対する多くの解決策を提供しています。あなたはいくつかの方法を使用して単一の文字列を作るためにあなたの引数を組み合わせることができます。

  • 文字列に変換し、%
    out_write.write("%s %s\n" % (labels[arr], results[arr]))
  • str.format()
    out_write.write("{} {}\n".format(labels[arr], results[arr]))
  • を使用して
    out_write.write(str(labels[arr]) + " " + str(results[arr]) + "\n")
  • 古い学校の文字列補間を連結します
  • f-strings、新しい暑さ
    out_write.write(f"{labels[arr]} {results[arr]}\n")

それとも、print()自体使用することができます。print()へのすべての呼び出しでfileパラメータを指定する必要がないようにするには

print(labels[arr], results[arr], file=out_write) 

を、あなたはfunctools.partial使用することができます。

file_out = functools.partial(print, file=out_write) 
file_out(labels[arr], results[arr]) 

かラムダ!

file_out = lambda *args: print(*args, file=out_write) 
file_out(labels[arr], results[arr]) 

なぜを印刷し、が同時に書き込みを行う関数を記述していませんか? 1回の呼び出しですべてのことができます!

out = lambda *args: print(*args) and print(*args, file=out_write) 
+0

ありがとう! str.format()のアドバイスを受け取りましたが、同じ行にテキストを出力します。私はそれが "ラベル結果"コンボを印刷した後に新しい行に入るために非常に基本的な何かを失っていると確信しています。ありがとう! – Veejay

+0

申し訳ありませんが、改行を書式文字列に入れるのを忘れてしまいました。私はちょうどそれらを追加する私の答えを編集しました.. – kindall

+0

パーフェクト!それがそれでした。もう1つ、私は複数のファイルにこのループを実行しているので、本質的にforループは複数回実行されますが、私のコードはforループに出力を1回だけ(テキストファイル上に)印刷し、ループしているので、私のディレクトリにファイルがあるので、ループしています。これがout.txtに反映されていない理由は何でしょうか?ありがとう:) – Veejay

関連する問題