python 获取文件绝对路径问题 __file__、“__file__”、os.getcwd()问题

使用 jupyter notebook 写代码的时候需要获取文件的绝对路径,同时需要在将 notebook 文件使用nbconvert 转换为 py 脚本后也能正常使用,但是现有的很多方法都没有办法在 notebook 和 py 脚本之间同时使用,下面是基于 notebook 的各种获取文件绝对路径的方法的测试:

import inspect
import os

print(os.path.dirname(os.path.abspath(__file__)))
print(os.path.dirname(os.path.abspath('__file__')))
print(os.path.dirname(os.path.realpath(__file__)))
print(os.path.dirname(os.path.realpath('__file__')))
print(os.getcwd())
print(sys.argv[0])
print(os.path.dirname(inspect.getfile(lambda: None)))


OutPut:
name '__file__' is not defined
/home/yke/Desktop/LiTr/3Extract #正确路径
name '__file__' is not defined
/home/yke/Desktop/LiTr/3Extract #正确路径
/home/yke/Desktop/LiTr/3Extract #正确路径
/home/yke/.conda/envs/opcd/lib/python3.9/site-packages/ipykernel_launcher.py
/tmp/ipykernel_5898

 可以看到在 notebook 中,__file__加上引号则能正常使用,引号原因未知。同时getcwd可以正常使用。下面是基于py脚本文件的获取绝对路径的方法测试:

import inspect
import os

print(os.path.dirname(os.path.abspath(__file__)))
print(os.path.dirname(os.path.abspath('__file__')))
print(os.path.dirname(os.path.realpath(__file__)))
print(os.path.dirname(os.path.realpath('__file__')))
print(os.getcwd())
print(sys.argv[0])
print(os.path.dirname(inspect.getfile(lambda: None)))


Output:
/home/yke/Desktop/LiTr/3Extract #正确路径
/home/yke/Desktop/LiTr
/home/yke/Desktop/LiTr/3Extract #正确路径
/home/yke/Desktop/LiTr
/home/yke/Desktop/LiTr
/home/yke/Desktop/LiTr/3Extract/Test_ExtractTrajectory.py
/home/yke/Desktop/LiTr/3Extract #正确路径

可以看到,在py脚本文件中__file__不加上引号才能正常使用,刚好与notebook中的结果相反,而notebook中能正常使用的 getcwd() 函数也会和加上引号的 "__file__" 的方法一致,刚好缺一层文件夹。国外的老哥也遇到了这样的问题,他的建议是在notebook和py脚本文件中分开使用 "__file__"和 __file__

因此暂时未找到能够同时在notebook和py脚本文件中通用的获取文件绝对路径的方法,欢迎各路大佬指教。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值