python3本地文件包路径

python3 package path of local file

我有以下结构

/
/myPackage/
          __init__.py
          myFile.csv
          myFunc.py
/test/
     __init__.py
     func.py

现在 myfunc.py 有一个函数读取 myFile.csv

def foo():
     with open('myFile.csv', newline='') as csvfile:
     ......

如果我在 func.py 中导入 foo,路径 "myFile.csv" 将不再正确。 我如何独立于导入 myfunc 的文件从 myFunc.py 引用 myFile.csv?

你可以使用__file__ which refers the file path of the current module; combining __file__ with os.path.dirname,你可以得到包含模块的目录。

import os

def foo():
     directory = os.path.dirname(__file__)
     csv_path = os.path.join(directory, 'myFile.csv')
     with open(csv_path, newline='') as csvfile:
         ...

如果你使用Python 3.4+,你可以使用pathlib代替:

import pathlib

def foo():
     csv_path = pathlib.Path(__file__).parent / 'myFile.csv'
     with csv_path.open(newline='') as csvfile:
         ...