2017-06-02 2 views
0

Laissez-nous jeter un oeil à la structure du répertoire de mon paquet PythonRéférence aux fichiers et aux fonctions à partir d'un package Python.

packman 
weights.py 
    functions: 
    weigh() 
    force() 
relatives.py 
    functions: 
    roll() 
    torque() 
__init__.py 
data 
    work.txt 
    rastor.txt 

Maintenant, j'ai deux questions.

Supposons d'abord que je veux accéder à work.txt, à partir de la fonction weigh() dans weights.py comment l'adresser? J'ai d'abord essayé avec ce

f = open("data/work.txt") 

Bien que cette méthode ne fonctionne avec succès lorsque le code est exécuté à l'intérieur principal. Cependant, il ne parvient pas à trouver le fichier quand il est utilisé comme un paquet et il pose la question

FileNotFoundError: [Errno 2] No such file or directory: 'data/work.txt'

Comment devrais-je écrire l'adresse de work.txt pour le rendre plus universel?

Mon autre question est quand je veux appeler la fonction weigh() de weights.py de la fonction roll() à l'intérieur de relationships.py, comment le ferais-je?

Répondre

0

J'ai généralement un main.py ou un point d'entrée unique similaire pour mes applications. Ensuite, je peux faire quelque chose comme ça pour obtenir le chemin pour mon application:

import os 

app_location = os.path.dirname(os.path.abspath(__file__)) 

vous pouvez maintenant passer cet endroit à vos autres modules ou peut-être même utiliser la même idée en eux pour obtenir leur emplacement. Puisque vous avez maintenant cet endroit, vous pouvez facilement faire quelque chose comme ceci:

data_location = os.path.join(app_location, 'data', 'work.txt') 
with open(data_location) as f: 
    # do something with the file object 
    for line in f: 
     print(line) 

Quant à votre deuxième question, il suffit d'importer weights dans votre script relatives.py et appelez weights.weigh()