通过终端/命令行删除搁置文件中的所有密钥

时间:2016-12-11 20:49:03

标签: python python-3.x command-line

我尝试删除搁置文件中的所有项目,方法是允许用户输入"清除"在终端。

基于我在本网站上阅读过的几个主题,搁置文件通常表现得像字典,因此.clear方法和其他几种方法应该有效,事实上当我在互动壳。但我无法让他们在我的计划中工作。

这是我最近的尝试(在shell中有效):

elif len(sys.argv) == 3 and sys.argv[1].lower() == 'clear':
    for key in mcbShelf:
        del mcbShelf[key]

在mcbShelf上使用del也无效。

我的程序还有一个"列表"功能,列出存储在shell中的所有密钥。

elif len(sys.argv) == 2:
    #list keywords
    if sys.argv[1].lower() == 'list':
        pyperclip.copy(str(list(mcbShelf.keys())))

当我在终端中尝试python3.5 mcb4.pyw clear,然后运行python3.5 mcb4.pyw list时,我认为应该将空列表复制到剪贴板。但是列表中有对象。

有什么想法?

3 个答案:

答案 0 :(得分:1)

我认为len(sys.argv) == 3应为2。

答案 1 :(得分:1)

我找到了两种方法来解决这个问题。一种是创建一个删除文件的函数,另一种是根据参数提取条件标志并将其命名为同一文件。这是经过验证的工作代码。

import shelve
import pyperclip
import sys
import os

mcbShelf = shelve.open('mcb')
command = sys.argv[1].lower()

def remove_files():
    mcbShelf.close()
    os.remove('mcb.dat')
    os.remove('mcb.bak')
    os.remove('mcb.dir')


if command == 'save':
    mcbShelf[sys.argv[2]] = pyperclip.paste()
elif command == 'list':
    pyperclip.copy(", ".join(mcbShelf.keys()))
elif command == 'del':
    mcbShelf.close() 
    # call the flag 'n' Always create a new, empty database
    mcbShelf = shelve.open('mcb', flag= 'n')
    # or delete the files
    remove_files()
else:
    pyperclip.copy(mcbShelf[sys.argv[1]])

mcbShelf.close()

答案 2 :(得分:0)

在我看来像第8章自动化无聊的东西:)好吧,不喜欢那个的编码风格。这是我的方法,包括删除一个,并删除所有命令。

import shelve
import pyperclip
import sys

mcbShelf = shelve.open('mcb')
command = sys.argv[1].lower()

if command == 'save':
    mcbShelf[sys.argv[2]] = pyperclip.paste()
elif command == 'list':
    pyperclip.copy(", ".join(mcbShelf.keys()))
elif command == 'delete':
    del mcbShelf[sys.argv[2]]
elif command == 'delete_all':
    mcbShelf.clear()
else:
    pyperclip.copy(mcbShelf[sys.argv[1]])

mcbShelf.close()