当我有如图这样文件架构时:
# A.py 文件源代码
import pandas as pd
import os
def func():
# current_dirname = os.path.dirname(__file__)
# df = pd.read_csv(current_dirname + "/data.csv")
df = pd.read_csv("data.csv")
print(df)
if __name__ == '__main__':
func()
# mainA.py 文件源代码
from moduleA.A import func
if __name__ == '__main__':
func()
直接运行 A.py
自然是打印 data.csv
的内容。
但是直接运行 mainA.py
,会打印
FileNotFoundError: [Errno 2] File b'data.csv' does not exist: b'data.csv'
,表示找不到data.csv
文件。即,从外部进入的程序再调用fuc()
函数时,读入 data.csv
只会从与自己同根目录下寻找。
如果想让moduleA
内的程序直接寻找自己模块文件内的数据如何办呢?解除func()前两行的注释,再进行一下小修改,如下代码所示。
# A.py 文件源代码
import pandas as pd
import os
def func():
current_dirname = os.path.dirname(__file__)
df = pd.read_csv(current_dirname + "/data.csv")
# df = pd.read_csv("data.csv")
print(df)
if __name__ == '__main__':
func()
__file__
是python内置变量,储存本文件的绝对路径名
os
模块中os.path.dirname()
则可以返回文件的上级目录
参考: