python 相对路径文件的操作

原创 2018年04月13日 17:39:22

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


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xyh421/article/details/79932344

Python里面的相对路径与绝对路径

# -*- coding: utf-8 -*- """ Created on Mon Jan 29 19:59:04 2018 @author: zpy """ import os path1=...
  • xiaoyaoshanzhuang
  • xiaoyaoshanzhuang
  • 2018年01月29日 20:22
  • 288

002_022 Python 计算目录间的相对路径

代码如下: #encoding=utf-8 print '中国' #计算目录间的相对路径 import os,itertools def all_equal(elements): f...
  • houyj1986
  • houyj1986
  • 2014年03月17日 02:10
  • 1512

python学习:绝对路径和相对路径

大牛们应该对路径都很了解了,这篇文章主要给像我这样的入门小白普及常识用的,啊哈 下面的路径介绍针对windows,其他平台的暂时不是很了解。 在编写的py文件中打开文件的时候经常见到下面其中路径的...
  • databatman
  • databatman
  • 2015年10月27日 20:57
  • 25958

Robot Framework中Python加载相对路径DLL

在前一篇博文>中,提到如何使用Python使用C/C++编译成的DLL,从而让自动化测试中调用过程更加灵活。在Robot Framework,使用Python编写函数对A.DLL进行加载,A.DLL又...
  • CJF_iceKing
  • CJF_iceKing
  • 2013年12月12日 21:13
  • 5435

Python实现采用相对路径打包成tar压缩文件

Python代码如下: archival_name = "test.tar" # 创建压缩包名 tar = tarfile.open(save_path + archival_name, "w:...
  • ZhouyuanLinli
  • ZhouyuanLinli
  • 2017年12月21日 18:09
  • 197

Python中的绝对路劲和相对路径

 1、绝对路径  os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: ? 1 2 3 4 5 6 >...
  • huobanjishijian
  • huobanjishijian
  • 2016年10月17日 14:43
  • 3139

Python的绝对路径和相对路径

1、绝对路径  os.path.abspath("文件名"): 显示的是一个文件的绝对路劲 eg: ? 1 2 3 4 5 6 >>> i...
  • Beyond_2016
  • Beyond_2016
  • 2017年11月03日 20:30
  • 370

Python import相对路径

python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。 下面将具体介绍几种常用情况: (1)主程序与模块程序在同一目录下: 如下面程序结构: `-...
  • Tony_Wong
  • Tony_Wong
  • 2014年01月09日 16:45
  • 6871

python读取CSV文件时的路径

python读取CSV文件方法: 方法1.可先用以下代码查看当前工作路径,然后将CSV文件放在该路径下。 import os os.getcwd() 方法2.(绝对路径) df=pd.read_c...
  • u010084228
  • u010084228
  • 2017年09月27日 10:31
  • 2159

计算两个路径的相对路径

上面是自己写的计算两个相对路径的函数,
  • baixiaoshi
  • baixiaoshi
  • 2014年10月09日 07:10
  • 787
收藏助手
不良信息举报
您举报文章:python 相对路径文件的操作
举报原因:
原因补充:

(最多只允许输入30个字)