为什么read()函数会删除我文件中的所有数据?

时间:2017-08-17 02:22:55

标签: python macos python-3.x python-3.6 sys

我正在做一个我必须制作多层板的项目。以下是它的所作所为:

这个多层板将贯穿终端。它将创建一个名为 clipboardd 的文件,并将所有复制的文本保存在那里。这个人可以根据需要添加任意数量的复制文本,如果他愿意,他也可以清除多页面文件。

以下是代码:

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()删除文件 clipboardd 中的所有字符?

3 个答案:

答案 0 :(得分:6)

每次用' w'打开文件模式,它会覆盖文件中的所有现有数据。 read()不是这样做的。要防止出现这种情况,请使用' a'打开文件。每次模式。 希望这会有所帮助。

答案 1 :(得分:5)

当您在程序顶部执行jim=open('multiclipboardd','w')时,它会截断原始文件并将其删除。这就是为什么你要归档的原因。

此外,当您打开文件时,您应该.close()他们或使用context manager.

答案 2 :(得分:1)

正如Amadan所说,read()并未截断您的文件。

文件顶部的无条件jim=open('multiclipboardd','w')为。

如果您不希望它删除您的内容,请将'w'替换为'a'