2013-06-27 3 views
6

쉘프 파일을 만들고 사전 데이터를 삽입했습니다. 이제 선반 파일을 정리하여 깨끗한 파일로 다시 사용하려고합니다.쉘프 파일을 비단뱀으로 비우려면 어떻게해야합니까?

import shelve 
dict = shelve.open("Sample.db") 
# insert some data into sample.db 
dict = { "foo" : "bar"} 

#Now I want to clean entire shelve file to re-insert the data from begining. 
+0

파일을 삭제하지 않는 이유는 무엇입니까? –

+1

'dict = { "foo": "bar"}'는'dict [ "foo"] = "bar"'이어야한다는 것에주의하십시오. 이제는 선반 객체에 데이터를 삽입하지 않고 선반을 변경하지 않고 새로운 사전 객체에 'dict'을 지정합니다. – george

답변

9

선반 따라서, 단지 사전처럼 동작 : 또는

dict.clear() 

, 당신은 항상 파일을 제거하고 새로 만들 보류하도록 할 수 있습니다.

+0

'shelve' 모듈은 파일 이름에 물건을 추가 할 수 있으며 내 컴퓨터에서는 실제로 몇 개의 파일을 만듭니다.사전을 지우는 것이 삭제할 파일이나 파일의 문제를 명확히 해줍니다. – kuzzooroo

-1

나는 이것이 당신이 찾고있는 것이라고 생각합니다.

del dict["foo"] 
1

dict.clear()는 (윈도우 7 64 비트 파이썬 3.5.2) 가장 쉬운 방법이며, 유효해야하지만 실제로 선반 파일을 삭제하지 않는 것 같다. 나는 항상 같은 크기로 기대 예를 들어, 선반 .dat 파일 크기, 나는 다음 코드를 실행할 때마다 증가 :

shelf = shelve.open('shelf') 
shelf.clear() 
shelf['0'] = list(range(10000)) 
shelf.close() 

업데이트 : shelve과 같이 사용dbm.dumb 그 Windows에서 데이터베이스를 기본이 TODO 항목 in its code 포함

  • 무료 공간을 확보를 (현재, 공간은 한 번 점령 삭제되거나 확장 된 항목은 다시 사용하지 않음)

이는 계속 증가하는 선반 파일 문제를 설명합니다.


그래서 대신 dict.clear()

, 나는 flag='n'shelve.open을 사용하고 있습니다. shelve.open() documentation 인용 :

옵션 플래그 매개 변수는 dbm.open의 플래그 매개 변수와 같은 해석이있다().

그리고 dbm.open() documentation flag='n'을 위해 :

항상 읽기 오픈 선반이 이미 열려있는 경우

를 작성 비어있는 새 데이터베이스를 생성, 사용은 다음과 같습니다

0

이들 중 아무 것도 작동하지 않습니다. 내가 한 일은 결국 func 파일 삭제를 처리 할 수 ​​있습니다.

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': 
    remove_files() 
else: 
    pyperclip.copy(mcbShelf[sys.argv[1]]) 

mcbShelf.close() 
관련 문제