Python中的相对文件路径的调用

正文共624个字,预计阅读时间3分钟。

前言

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

1.
2|--dir1
3    |--main.py
4    |--dir2
5       |--func.py
6       |--test.txt

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

1# func.py
2def load_txt()
3filename = './test.txt'
4return open(filenamem, 'r').read()

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

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

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

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

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

方法

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

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

1def get_cur_path1():
2import os
3return os.path.abspath(os.curdir)
4def get_cur_path2():
5import sys
6return sys.argv[0]
7def get_cur_path3():
8import os
9return os.path.dirname(__file__)

因此,解决办法如下。修改func.py中的读取函数如下即可:

1# func.py
2import os
3def load_txt()
4module_path = os.path.dirname(__file__)    
5filename = modelu_path + '/test.txt'
6return open(filenamem, 'r').read()

原文链接:https://www.jianshu.com/p/cd421014cfbb

原文发布于微信公众号 - 人工智能LeadAI(atleadai)

原文发表时间:2018-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏流浪猫的golang

go test 使用全教程

golang 中的go test 为golang 软件包提供了一种单元测试方式,非常简单的同时也非常好用。 ok 先来看看怎么用? 1. 新建go 文件...

9940
来自专栏左瞅瞅,右瞅瞅

SaltStack——配置管理小试(jinja使用)

https://docs.saltstack.com/en/latest/ref/modules/all/

20160
来自专栏一个会写诗的程序员的博客

java代码执行过程简介

代码即数据,数据即代码,而我们的数据是保存在文件上的,所以我们说文件就是数据,一切代码都是文件。

12430
来自专栏木制robot技术杂谈

在Ubuntu14.04下创建可执行文件

前言 使用ubuntu的过程中一些软件启动前总是需要执行一下shell语句启动或者出问题时重启,但是不常用的话总会忘记,于是萌生了做一个可执行文件双击执行一段s...

47550
来自专栏lgp20151222

…… are only available on JDK 1.5 and higher 错误(spring 的jdk版本检测在jdk 8下的修订)

1、在项目中创建一个package为org.springframework.core 2、在该package下面新建JdkVersion.java,内容如下...

32310
来自专栏不想当开发的产品不是好测试

Git 默认不区分大小写

背景: 通过代码规范,修改了包名为全小写(修改了文件夹目录),但发现push后,git服务器的文件夹目录还是为大写 解决方法: git默认是不区分大小写的,意思...

223100
来自专栏我的技术专栏

vi 方向键和Backspace键失效问题的解决方法

10820
来自专栏JadePeng的技术博客

Jupyter notebook安装与使用

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 安装 安装python...

40260
来自专栏Java爬坑系列

【JAVA零基础入门系列】Day1 开发环境搭建

一、安装JDK java的sdk简称JDK ,去其官方网站下载最近的JDK即可。 http://www.oracle.com/technetwork/java/...

21280
来自专栏云计算教程系列

在Linux中使用find命令行查找文件

find是一个基于条件机制递归过滤文件系统中对象的命令。使用find搜索文件系统中的文件或目录。使用-exec标志,可以在同一命令中找到并立即处理文件。

14220

扫码关注云+社区

领取腾讯云代金券