2017-03-20 2 views
1

私が作業しているPythonスクリプトがあります。これはローカルの気象条件とネットワーク情報を.bashrcファイルに追加します。 2個のバグを除いてすべてが期待どおりに動作します。Python3 - ファイルから最後の(n)行を削除し、新しいデータを追加します。

(「エコー[ローカルの気象]::」、66.9、「F」最初の代わりに古いデータを削除して新しいを追加するには、ちょうどこのような新しいデータを追加します'、' with '、' overcast clouds ') ('あなたのパブリックIPは: '、' xxxx '('エコー[ローカル天気]: '、66.9、' F '、' with '、'そう「、 『XXXX』)

と第二私は(括弧、コンマ、等。)例えば、印刷されたテキストから書式設定をドロップする必要があります:「) (」エコー[あなたのパブリックIPがあります]文字列は次のように表示されます。

どんより雲66.9F
エコー[公衆IP]:

エコー[ローカルの気象] xxxxの

ここでは、私のスクリプトのファイル操作部分である:

with open('HOME/.bashrc', 'a') as f: 
     w = "echo [Local weather]:", wx_t,"F", "with", wx_c 
     i = "echo [Your public IP is]:", ip 
     out = [str(w), str(i)] 
     f.write('\n'.join(out)[0:-3]) 

ので、私は思いましたそのf.write('\n'.join(out)[0:-3])はファイルの最後の3行を削除しますが、明らかに文字列の最後の3文字を削除します。私が試みていることを達成するためには、何を変える必要がありますか? f.write()の代わりにf.writelines()を使用する必要がありますか?

へようこそ[ホスト名]あなたはユーザーとしてログインしている[some_user]
[現地時間]::2017月3月20日8時28分32秒CDT

期待される結果は、最終的には次のようになります。 。
[ローカルの気象]:晴天と66.56 F
[ローカルIP]:192.168.xxの[公開IP]:事前に、これは私がapologiz重複問題であるかのxxxxの

感謝e。私は解決策を探す際に精通していると感じましたが、失敗しました。

UPDATE: だから私は

w = "echo [Local weather]: " + str(wx_t) + " F, with " + wx_c

f.writelines()代わりのf.write()を使用する

w = "echo [Local weather]:", wx_t,"F", "with", wx_c

を変更することで、フォーマットを修正しました。また、DeepSpaceが提案したようにf.close()を削除しました

+0

'with'を使用しているので、' f.close() 'を呼び出す必要はありません。 – DeepSpace

+0

ありがとうございます。私はまだかなりPythonに新しいし、私はそれを安全にプレイするように思った –

答えて

0

最初のバグは、'w'の代わりに'a'を最初の行に使用することによって発生します。これにより、Pythonはファイルを上書きするのではなくファイルに追加します。

あなたは文字列にすべてのデータを結合し、そして参加した文字列の[0:-3]ではなく、リストout[0:-3]を取得しているため、2番目のバグが原因です。固定

あなたのコードを、次のようになります。

with open('HOME/.bashrc', 'w') as f: 
     w = "echo [Local weather]:", wx_t,"F", "with", wx_c 
     i = "echo [Your public IP is]:", ip 
     out = [str(w), str(i)] 
     f.write('\n'.join(out[0:-3])) 
0

彼の提案のためのフェリックスのおかげで、しかし、彼のコードを実装することは手付かずのままに必要なファイルの一部を削除しました。私は、このリンクを見つけた後、"delete final line in text file with python"私は解決策を見つけることができたので、私はこの質問を投稿する前に、さらに調査しておくべきだったと思います。う、私は私がこれを書くためのより効率的な方法があると想像することができますPythonのためにかなり新しいですので

out_file = (home+('/scripts/python/working/weather01')) 
rf = open(out_file, 'r') 
lines = rf.readlines() 
rf.close() 

f = open(out_file, 'w') 
f.writelines([item for item in lines[:-2]]) 

w = "echo [Local weather]: " + str(wx_t) + " F, with " + str(wx_c) 
i = "echo [Your public IP is]: " + ip 
out = [str(w), str(i)] 
f.writelines('\n'.join(out)) 
f.close() 

ので、誰もがそれを批判する気場合:ここで

は期待通りに行って固定コードであります素晴らしい。皆さんありがとう!

関連する問題