先让我们来看看一个用到相对文件路径的函数调用的问题。假设现在有两个脚本文件main.pyfunc.py,他们的路径关系是:

.
|--dir1
|--main.py
|--dir2
|--func.py
|--test.txt

func.py的作用是提供load_txt()函数,读取同级目录下test.txt文件中的内容并返回。

# func.py

def load_txt()
filename = './test.txt'
return open(filenamem, 'r').read()

假设现在在main.py中调用load_txt()函数:

# main.py
from dir2 import func if __name__ == '__main__':
print func.load_txt()

这个时候会报类似找不到文件test.txt的错误。

为什么会这样呢?这是因为在函数调用的过程中,当前路径.代表的是被执行的脚本文件的所在路径。在这个情况中,.表示的就是main.py的所在路径,所以load_txt()函数会在dir1文件夹中寻找test.txt文件。

那么怎么样才能在函数调用的过程中保持相对路径的不变呢?

方法

在网上有相当多的教程都有提到这个Python中相对文件路径的问题,但是大部分都没有提及到在这种情况下的解决办法。

在以下的三个函数中,第一个和第二个是大部分教程中的解决办法,但是这样是错误的,因为第一个和第二个函数所获取的"当前文件路径"都是被执行的脚本文件的所在路径,只有第三个函数返回的当前文件路径才是真正的、该函数所在的脚本文件的所在路径

def get_cur_path1():
import os
return os.path.abspath(os.curdir) def get_cur_path2():
import sys
return sys.argv[0] def get_cur_path3():
import os
return os.path.dirname(__file__)
 
因此,解决办法如下。修改func.py中的读取函数如下即可:

# func.py

import os

def load_txt()
module_path = os.path.dirname(__file__)
filename = modelu_path + '/test.txt'
return open(filenamem, 'r').read()

Python中的相对文件路径的调用的更多相关文章

  1. python中执行该文件,就调用 mian 方法

    代码: test.py import student def main(): st = student.student(1001, 'tommy', 18) st.sing() st.dance() ...

  2. python中__init__.py文件的作用

    问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...

  3. python中逐行读取文件的最佳方式_Drupal_新浪博客

    python中逐行读取文件的最佳方式_Drupal_新浪博客 python中逐行读取文件的最佳方式    (2010-08-18 15:59:28)    转载▼    标签:    python   ...

  4. python中readline判断文件读取结束的方法

    注:内容来自网络 本文实例讲述了python中readline判断文件读取结束的方法.分享给大家供大家参考.具体分析如下: 大家知道,python中按行读取文件可以使用readline函数,下面现介绍 ...

  5. python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  6. MinGW中的头文件路径级环境变量设置

    整理自 MinGW中的头文件路径   C头文件目录%MINGW_PATH%/include下有头文件,里面有strcpy等c函数的声明. C++头文件目录%MINGW_PATH%/lib/gcc/mi ...

  7. Python中__init__.py文件的作用详解

    转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...

  8. 转载:【学习之家】Python中__init__.py文件的作用

    Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...

  9. UWP 中的各种文件路径(用户、缓存、漫游、安装……)

    原文 UWP 中的各种文件路径(用户.缓存.漫游.安装……) UWP 提供了多种不同文件路径访问方式,对应到不同的文件路径中.可能我们只是简单用 ApplicationData.Current 获取一 ...

随机推荐

  1. 修改终端下vim的PopupMenu选种项的背景颜色

    我平常比较喜欢使用终端下的 VIM,最方便的就是随时可以使用ctrl+z切换到终端下执行命令, 然后再通过fg切换回 VIM.如果再有个透明效果,那就更赞了.不过最近换了一个配色ron 后, 有个比较 ...

  2. 工具-Memcahce和Redis比较

    一.Memcache 1.     memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小redis有部份存在硬盘上,这样能保证数据的持久性. 2.      Memcache ...

  3. js removeChild

    removeChild():删除元素只能通过直接父元素删除,没有自删 1 <select id="city" size="6" style="w ...

  4. SQLite简单介绍

    一.离线缓存 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等. 说明:离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式 (1)归档:NSCodeing.NSKeyed ...

  5. 【LeetCode】40. Combination Sum II (2 solutions)

    Combination Sum II Given a collection of candidate numbers (C) and a target number (T), find all uni ...

  6. 马老师 Linux基础入门

    总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线.地址总线和控制总线,分别用来传输数据.数据地址和控 ...

  7. Squid调试和故障处理

    http://blog.zhdata.com/tag/squid第16章 调试和故障处理 16.1 一些通用问题 在讨论通用debug前,我先提起一些经常发生的问题. 16.1.1 “Failed t ...

  8. 自定义Microsoft Visual Studio 代码模板,增加公司和个人信息

    C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\ItemTemplates\CSharp目录里面有各种新建模板分类: 修 ...

  9. pylot 学习笔记-使用

    Console and Blocking Mode - Command Line Options: usage: run.py [options] args -a, --agents=NUM_AGEN ...

  10. Android判断当前网络是否可用--示例代码

    Android判断当前网络是否可用--示例代码 分类: *07 Android 2011-05-24 13:46 7814人阅读 评论(4) 收藏 举报 网络androiddialogmanagern ...