Я пытаюсь удалить все элементы в файле полки, позволяя пользователю вводить «очистить» в терминале.

Основываясь на нескольких потоках, которые я читал на этом сайте, файлы полок обычно ведут себя как словари, поэтому метод .clear и некоторые другие подходы должны работать, и фактически работают, когда я тестирую их в интерактивной оболочке. Но я не могу заставить их работать в моей программе.

Вот моя последняя попытка (которая работала в оболочке):

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

Использование del на mcbShelf также не сработало.

Моя программа также имеет функцию «список», которая перечисляет все ключи, хранящиеся в оболочке.

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, я считаю, что пустой список должен быть скопирован в буфер обмена. Но в списке есть объекты.

Любые мысли?

0
friendlyman23 11 Дек 2016 в 23:49

3 ответа

Лучший ответ

Я думаю, что len(sys.argv) == 3 должно быть 2.

1
Gribouillis 11 Дек 2016 в 21:11

Выглядит как глава 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()
0
plumps 22 Фев 2017 в 21:38

Я нашел 2 способа справиться с этим. Один - создать функцию для удаления файлов, другой - установить флаг условия на основе аргумента и присвоить ему имя того же файла. Это проверенный рабочий код.

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()
1
Will Meyers 2 Апр 2017 в 23:20