2017-08-31 1 views
0

Je travaille sur Ch. 8 de "Automatiser le truc ennuyeux avec Python", en essayant d'étendre le projet Multiclipboard. Voici mon code:Comment puis-je ouvrir un fichier python shelve dans un répertoire spécifique

#! /usr/bin/env python3 

# mcb.pyw saves and loads pieces of text to the clipboard 
# Usage:  save <keyword> - Saves clipboard to keyword. 
#    <keyword> - Loads keyword to the clipboard. 
#    list - Loads all keywords to clipboard. 
#    delete <keyword> - Deletes keyword from shelve. 

import sys, shelve, pyperclip, os 

# open shelve file 
dbFile = os.path.join('Users', 'dustin', 'Documents', 'repos', 'python', 'mcbdb') 
shelfFile = shelve.open(dbFile) 


# Save clipboard content 
if len(sys.argv) == 3 and sys.argv[1].lower() == 'save': 
    shelfFile[sys.argv[2]]= pyperclip.paste() 

# Delete choosen content 
elif len(sys.argv) == 3 and sys.argv[1].lower() == 'delete': 
     if sys.argv[2] in list(shelfFile.keys()): 
      del shelfFile[sys.argv[2]] 
      print('"' + sys.argv[2] + '" has been deleted.') 
     else: 
      print('"' + sys.argv[2] + '" not found.') 
elif len(sys.argv) == 2: 
    # List keywords 
    if sys.argv[1].lower() == 'list': 
     print('\nAvailable keywords:\n') 
     keywords = list(shelfFile.keys()) 
     for key in sorted(keywords): 
      print(key) 
    # Load content   
    elif sys.argv[1] in shelfFile: 
     pyperclip.copy(shelfFile[sys.argv[1]]) 
    else: 
     # Print usage error 
     print('Usage:\n1. save <keyword>\n2. <keyword>\n' + 
       '3. list\n4. delete <keyword>') 
     sys.exit() 

# close shelve file 
shelfFile.close() 

J'ai ajouté ce programme à mon chemin et je voudrais l'utiliser à partir de quel répertoire Je travaille actuellement dans le problème est que shelve.open() crée un nouveau fichier dans le. répertoire de travail actuel. Comment puis-je avoir un répertoire persistant?

+0

utilisant un chemin absolu 'dbFile' est un début. Cela semble faux pour le moment, car c'est un chemin relatif d'où vous êtes, en commençant par 'Users', mais il semble vraiment que vous voulez'/Users' –

Répondre

0

Votre

dbFile = os.path.join('Users', 'dustin', 'Documents', 'repos', 'python', 'mcbdb') 

va se transformer en quelque chose comme 'Users/dustin/Documents/repos/python/mcbdb' si vous l'exécutez de /Users/dustin/ il va pointer vers /Users/dustin/Users/dustin/Documents/repos/python/mcbdb ce qui est probablement pas ce que vous voulez.

Si vous utilisez un chemin d'accès absolu, un élément racine de / ou de X:\ (dépendant du système d'exploitation) conservera ce "répertoire spécifique".

Je pourrais recommander quelque chose d'autre si, en utilisant ~ et obtenir os.path.expanduser le répertoire personnel de l'utilisateur:

dbFile = os.path.expanduser('~/.mcbdb')