python 相对路径文件的操作

python项目中,如果pyton代码需要访问某个外部文件,该文件位于代码文件的某个相对路径位置,我们可以在代码中使用相对路径来访问该文件。 比如图中的代码结构:

 files

sample.py文件中,如果要访问配置文件server.ini文件,就可以用 “../conf/server.ini”来进行访问。

但是经常的问题是,该python文件又被别的目录的python文件import引用, 此时相对路径就会出错。这是因为此时相对路径是基于当前运行脚本的路径来计算的, 如果被引用的python文件和调用文件不在同一个目录,则相对路径就会失效。

比如,我们的例子中, sample.py文件内容如下:

import ConfigParser
import os

def read_conf():
    file_path = '../conf/server.ini'
    config = ConfigParser.ConfigParser()
    config.read(file_path)
    return config.get('conf', 'value')


if __name__ == '__main__':
    print read_conf()

main.py内容如下:

from utils.sample import read_conf

print read_conf()

比如上图中,如果main.py调用read_conf时就会发现server.ini文件找不到。问题就处在运行main.py时,当前路径是main.py所在的文件夹,而sample.py中使用的相对 路径基于该文件夹就会找错位置。解决办法是在sample.py中使用文件绝对路径来访问server.ini文件, 但是我们又要根据脚本存放的当前位置来获得运行时的路径。这个时候 我们就需要用到python中的 __file__变量, 该内置变量存放了本python文件的当前路径信息,根据该变量,我们可以os.path.dirname(__file__)得到相应文件 的绝对路径。

在sample.py中file_path变量做如下修改:

    file_path = '../conf/server.ini'
    -->
    file_path = os.path.join(os.path.dirname(__file__) + '/../conf/server.ini')

注意 路径前加 ‘/’,否则文件路径会不完整。

参考资料:

http://stackoverflow.com/questions/918154/relative-paths-in-pythonhttp://stackoverflow.com/questions/1270951/python-how-to-refer-to-relative-paths-of-resources-when-working-with-code-repo


  • 23
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值