1

J'ai un projet d'informatique scientifique pour lequel j'exécute une analyse et souhaite que certaines données soient conservées avec le module python. J'aimerais que les données soient «importables» pour être utilisées dans quelques exemples.Importer des données csv stockées dans un module python

La hiérarchie des dossiers de projet ressemble à ceci:

~/parent/ 
    setup.py 
    setupegg.py 
    /project 
     __init__.py 
     core.py 
     /data 
      __init__.py 
      load_data.py 
      somedata.csv 
     /examples 
      __init__.py 
      ex1.py 

J'ai couru python setupegg.py develop à partir du dossier d'accueil du projet si ce paquet est importable partout sur mon ordinateur. Cela fonctionne jusqu'à présent.

Le fichier load_data.py ressemble à ceci:

import pandas as pd 
df = pd.read_csv("somedata.csv") 

Et le fichier ex1.py ressemble à ceci:

from test_module.data.load_data import df 
def run(): 
    print df 

Mais maintenant, quand je lance from project.examples import ex1 ou from project.data import load_data Je reçois un message IOError disant « de somedata. csv 'n'existe pas.

Si j'ajoute ceci au préambule des données/fichier load_data.py

import os 
print os.listdir('./') 

Il imprime la liste des fichiers/dossier dans le répertoire que je travaille à partir.

Bien sûr, si j'utilise des chemins d'accès absolus aux données, alors il se chargera parfaitement. Comment puis-je ajuster les instructions d'importation afin que la lecture des fichiers csv dans le dossier de données n'utilise pas de chemins d'accès absolus?

Répondre

8

Si le csv est dans le même répertoire que le module qui ouvre alors vous pouvez essayer d'utiliser l'attribut __file__:

import os 
import pandas as pd 
df = pd.read_csv(os.path.join(os.path.dirname(__file__), "somedata.csv"))