2017-08-17 6 views
2

私はマルチクリップボードを作らなければならないプロジェクトをしていました。それは何をするつもりです:read()関数がファイル内のすべてのデータを削除するのはなぜですか?

このマルチチップボードは、ターミナルを介して実行されます。 という名前のファイルをクリップボードに作成し、そこにコピーしたテキストをすべて保存します。その人は、自分が望むだけ多くのコピーされたテキストを追加することができ、彼が望むならば、マルチクリップボードをクリアすることもできる。ここで

はコードです:

import pyperclip 
import sys 

jim=open('multiclipboardd','w') 

#This will copy text to the multiclipboard 
if len(sys.argv)==2 and (sys.argv[1].lower())=='save': 
    jim=open('multiclipboardd','a') 
    jim.write(pyperclip.paste()) 
    jim.write('\n') 
    print('The text has been pasted to the multiclipboard!') 
    jim.close() 


#This will read text from the multiclipboard 
elif len(sys.argv)==2 and (sys.argv[1].lower())=='list': 
    kk=open('multiclipboardd') 
    print(kk.read()) 


#This will delete the text of the multiclipboard 
elif len(sys.argv)==2 and (sys.argv[1].lower())=='delete': 
    jim=open('multiclipboardd','w') 
    jim.write('') 
    print('The clipboard has been cleared!') 
#jim and kk are just variables 

このファイルの名前はあるPanda.py

ターミナルでpython panda.py saveを呼び出すと、clipboarddという名前のフォルダに海流コピーしたテキストを保存する必要がありそしてそれはそうです!私はそれを呼び出すときにこれは完全に正常に動作します。

しかし、端末でpython panda.py listを実行しようとすると、コピーされた単語が画面に表示されますが、すべて削除されることが予想されます。 python panda.py listを呼び出す前に、clipboarddに110文字が含まれているとします。その後、python panda.py listを呼び出した後、0文字になります!

なぜread()ファイル内のすべての文字を削除しますかクリップボード

+2

'読んで()'切り捨てされていないファイルで'w'を置き換え、それはあなたのコンテンツを削除したくない場合。あなたのファイルの先頭にある無条件の 'jim = open( 'multiclipboardd'、 'w')'はです。 – Amadan

+0

'jim = open( 'multiclipboardd'、 'w')'はデータを削除する予定です!さらに、Pythonは 'python panda.py delete'を呼び出したときにのみ' jim = open( 'multiclipboardd'、 'w') 'に到達します –

+0

コードの3行目は何ですか? 2つの 'import'ステートメントの直後ですか? – Amadan

答えて

6

を使用する必要があるときに、開いているファイル

はまた、それは、ファイル内のすべての既存のデータを上書きします。 read()はこれを実行していません。これを防ぐには、毎回 'a'モードでファイルを開きます。 これが役立つことを願っています。

5

プログラムの先頭でjim=open('multiclipboardd','w')を実行すると、元のファイルが切り捨てられ、消去されます。だからあなたはファイルが消去されているのです。あなたが「W」モードを使用して、ファイルを開くたびにそれらを.close()context manager.

+0

を指摘してくれてありがとう私はコードを書いている間これについて考えました。しかし、それは本当に有用だと思いますか?ターミナルでこれを実行しています! IDLEではなくそれは.close()なしで完璧に動作します!とにかく、答えをありがとう:) –

+1

@ M.Hamelええ、それは動作しますが、長期的には問題を回避します。同じファイルにアクセスするより長いコードまたは複数のプログラムでは、競合状態やその他のI/Oエラーを避けることができます。これは本当に 'に慣れる価値があります。 – SH7890

+0

@ M.Hamelまた、端末またはIDLEまたはIDEで実行することは重要ではありません。ファイルオブジェクトはまだ閉じておく必要があります。 – SH7890

1

アマダン氏によると、read()はファイルを切り捨てません。

ファイルの先頭に無条件のjim=open('multiclipboardd','w')があります。

あなたは'a'

関連する問題