1

必要なものを生成する Python コードの行がありました。コードは次のとおりです。

os.system('cat {0}|egrep {1} > file.txt' .format(full,epoch))

次の内容のファイルを作成しました。

3                321.000 53420.7046629965511    0.299                 0.00000
3                325.000 53420.7046629860714    0.270                 0.00000
3                329.000 53420.7046629846442    0.334                 0.00000
3                333.000 53420.7046629918374    0.280                 0.00000

次に、上部に「TEXT 1」と表示されるようにコードを調整したかったので、頭に浮かんだ最初のことを試し、コードを次のように変更しました。

h = open('file.txt','w')
h.write('MODE 2\n')
os.system('cat {0}|egrep {1} > file.txt' .format(full,epoch))

これを行うと、次の出力が得られます。

TEXT 1
   317.000 54519.6975201839344    0.627                 0.00000
3                321.000 54519.6975202038578    0.655                 0.00000
3                325.000 54519.6975201934045    0.608                 0.00000
3                329.000 54519.6975201919911    0.612                 0.00000

つまり、「TEXT 1」の後の最初の行が正しくなく、最初の「3」が欠落しています。誰が私が間違っているのか、おそらくこの単純なタスクを実行するためのより良い方法を教えてもらえますか?

ありがとうございました。

4

2 に答える 2

1

Pythonでファイルハンドルを開き、それに書き込みますが、PythonはOSにフラッシュなどを任せます-設計上、何かが書き込まれるにファイルに何かを書きたい場合は、それが必要にflushなります手動で (実際には、 と を実行する必要がありますflush ) fsync

別の注意:> file.txtは新しいファイルを作成しますが、追加したい場合があります- これは>> file.txt. 要するに、あなたのコードは、あなたが考えるより不確定かもしれません。

もう 1 つの方法は、既にシェル レベルにいるため、subprocessモジュールを使用することです。

from subprocess import call

sts = call("echo 'TEXT 1' > file.txt", shell=True)
sts = call("cat {0}|egrep {1} >> file.txt".format(full,epoch), shell=True)
于 2013-04-25T23:01:32.897 に答える