2017-08-17 89 views
2

我正在做一個項目,我不得不製作一個多色滑板。這是它會做的:爲什麼read()函數刪除我的文件中的所有數據?

這個multiclipboard將貫穿終端。它將創建一個名爲的剪貼板並將所有複製的文本保存在那裏。該人可以添加儘可能多的複製文本,如果他願意,他也可以清除多滑腳板。

下面的代碼:

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之前,剪貼板有110個字母。然後在撥打python panda.py list後,它有0個字母!

爲什麼read()刪除文件中的所有字符clipboardd

+2

'閱讀()'不截斷你的文件替換'w'。文件頂部的無條件'jim = open('multiclipboardd','w')'是。 – Amadan

+0

'jim = open('multiclipboardd','w')'預計將刪除數據!而且,只有當一個人調用'python panda.py delete'時,Python纔會到達'jim = open('multiclipboardd','w')'' –

+0

代碼的第三行是什麼?在兩個'import'語句之後? – Amadan

回答

6

你打開你的文件,「W」模式每一次,它會覆蓋文件中的所有現有數據。 read()沒有這樣做。爲防止出現這種情況,請每次以'a'模式打開文件。 希望這有助於。

5

當您在程序的頂部執行jim=open('multiclipboardd','w')時,它會截斷原始文件並將其擦除。這就是爲什麼你的文件被擦除。

此外,當你打開文件,你應該.close(),或用context manager.

+0

我在編寫代碼時考慮過這個問題。但你認爲這真的很有用嗎?我們在終端上運行它!不在IDLE中。它完美的沒有.close()!無論如何,謝謝你的答案:) –

+1

@ M.Hamel是的,它的工作原理,但你從長遠來看避免了問題。在更長的代碼或多個訪問同一文件的程序中,您可以避免競爭狀況和其他I/O錯誤。真正值得習慣使用'。close()' – SH7890

+0

@ M.Hamel另外,在終端或IDLE或任何IDE中運行它並不重要。文件對象仍然應該關閉。 – SH7890

1

正如Amadan所說,read()不會截斷您的文件。

無條件jim=open('multiclipboardd','w')位於文件頂部。

如果你不希望它刪除您的內容,與'a'

相關問題