2017-03-07 13 views
1

私はubuntuで実行しているpythonで書かれたスクリプトを持っています。このコマンドの出力をファイルに出力したいと思います。直接のpython出力をlinuxファイル

print str(kFx) + ',' + str(kFy) + ',' + str(kFz)

私は、理想的にはpython.py> file.txtをを使用しますが、スクリプトは、私は、ファイルへの出力をリダイレクトする場合に使用することはできませんいくつかのインタラクティブな部分があります。

私はこのコードを変更しようとしましたが、構文エラーが発生しました。私は文字通り初めてPythonを使用して知識の不足を言い訳します。

print (str(kFx) + ',' + str(kFy) + ',' + str(kFz) , file=open("output.txt", "a")) 

どのようにすればいいですか?

は、あなたがやったように、あなたがfile=open("output.txt", "a"))でファイルを開くことができ、 アレックス

+1

あなたはおそらく([ '印刷>>オープンに印刷を変更するかのPython 2を使用しています"str(kFx)+ '、' + str(kFy)+ '、' + str(kFz)'](https://docs.python.org/2/reference/) simple_stmts.html#the-print-statement)、またはコードファイルの先頭に['__future__ import print_function'](https://www.python.org/dev/peps/pep-3105/) 'print()'関数を(tの代わりに)使用したい彼の声明)。 – dhke

答えて

1

、ありがとうございました。その後、代わりにあなたはそれがファイルの最後にこの文字列を追加します(オープンの「A」と表記)追加モードでファイルを開いたbecasueあなたは

file.write(str(kFx) + ',' + str(kFy) + ',' + str(kFz)) 

を使用する印刷。

file.write("\n") 

あなたが書いて行われます:あなたはまた、あなたの文字列の後に新しい行を追加する必要があるかもしれません

file.close() 
+0

例外が発生してもファイルを閉じるには、 'with'文を使用します。また、print()関数を呼び出して、 'str()'を呼び出さずに入力をフォーマットし、文字列を手動でconcatinatingすることもできます。 – jfs

+0

あなたの指示に従ってください。ありがとうございました:) –

0

あなたがして、キーワードを使用する場合。ファイルストリームはブロック内でのみ開いたままになります。その後、あなたが完了したときにそれを閉じることを覚えておく必要はありません。

あなたは「test」をエコーエコー「テスト」>> test.txtのようなファイルとしないように追加することを意図している場合> test.txtのそれからちょうど「」の代わりにオープンモードを変更する「W」 Pythonの3オン

+1

''\ n''がありません。 'str()'を手動で呼び出す必要はありません。 'format()'はそれを行います。 '' {}、{}、{} \ n'.format(kFx、kFy、kFz) 'の形式で数字を省略することができます。 – jfs

+1

pythonで 'a'オプションが何であるのかわからなかったので、私は修正してくれてありがとう。ありがとうございました :) –

0

、それは次のようになります。私は読みやすくするためにコンマの後にスペースを追加しました

with open("output.txt", "a") as file: # append to the file 
    print(*kF, sep=', ', file=file) 
    # etc... 

。あなたのスクリプトの先頭にfrom __future__ import print_functionを追加し、手動で", ".join(map(str, kF))または単に文字列に変換することができ、Pythonの2日What does ** (double star) and * (star) do for parameters?

を参照してください:

print(kFx, kFy, kFz, sep=', ', file=file) 

あなたが代わりにkFxkFykFzなどのkFオブジェクトを使用することができ、タプル/リスト:

kF = "kFx value", "kFy value", "kFz value" 

や読みやすさのため

は、あなたが use collections.namedtupleは、カスタムクラスを作成することができます:

from collections import namedtuple 

Point3D = namedtuple("Point3D", "x y z") 

kF = Point3D("kFx value", "kFy value", "kFz value") 
# -> Point3D(x='kFx value', y='kFy value', z='kFz value') 

それはkF.xkF.ykF.z構文を可能にします。あなたが変更可能なオブジェクトが必要な場合は、use types.SimpleNamespaceでした:

Pythonの2オン
from types import SimpleNamespace 

kF = SimpleNamespace(x="kFx value", y="kFy value", z="kFz value") 
kF.x += " modified" 
# -> namespace(x='kFx value modified', y='kFy value', z='kFz value') 

、あなたは部分的にclass Point3D: passを使用して、それをエミュレートすることができます。豊富な機能のために

、あなたは可能性がありtry attrs package

#!/usr/bin/fades 
import attr # fades.pypi attrs 

Point3D = attr.make_class("Point3D", ["x", "y", "z"]) 

kF = Point3D("kFx value", "kFy value", "kFz value") 
kF.x += " modified" 
# -> Point3D(x='kFx value modified', y='kFy value', z='kFz value') 

本とは、PyPIからサードパーティのPythonパッケージを必要とする他のコード例を実行するには、可能性がuse fades for convenience(インストールするには、次のコマンドを実行しますsudo apt-get install fades)。必要ではありませんが、代わりにpip install attrsのように手動で依存関係をインストールすることもできます(同じpythonの実行ファイルをpiphead -1 $(command -v pip)として実行してください)。 JSON形式で保存するには

print(*attr.astuple(kF), sep=', ', file=file) 
# -> kFx value modified, kFy value, kFz value 

:ファイルにkFを印刷するには

import json 

with open("kF.json", "w", encoding='utf-8') as json_file: # overwrite the file 
    json.dump(attr.asdict(kF), json_file) 
    # -> {"x": "kFx value modified", "y": "kFy value", "z": "kFz value"} 
関連する問題