当你搜索 "获取当前文件路径" 时,有的文章会提到用os.getcwd(),但是这玩意要慎用!

废话不多说,直接上例子:

E:\program_software\Pycharm\ytb\ytb_api\api\views.py 文件内容如下:

path1 = os.path.abspath(os.path.dirname(os.getcwd()))
print('path1: ', path1)

在别处调用后:

结果并不是想要的当前文件路径。

为什么会这样?

去看getcwd源码:

解释:return 得到当前工作路径(working directory)

那这个working directory到底是什么?

继续搜索:

翻译一下:

当前工作路径 working directory 就是脚本运行/调用/执行的地方,而不是脚本本身的地方。

也就是说「当前文件路径」跟「当前工作路径」没关系,

即os.getcwd() 返回值跟你的 Python 文件路径没关系,

如果要获得「文件路径」你得使用 __file__。

比如,我想要的是当前文件的绝对路径,那就需要这俩哥出场了:

还以E:\program_software\Pycharm\ytb\ytb_api\api\views.py 举例子:

# Return the absolute version of a path. 获取当前文件的绝对路径
print(os.path.abspath(__file__))
# E:/program_software/Pycharm/ytb/ytb_api/api/views.py # Returns the directory component of a pathname 获取当前文件所属的文件夹
print(os.path.dirname(__file__))
# E:/program_software/Pycharm/ytb/ytb_api/api

  

搭配使用,返回当前文件所在文件夹的绝对路径(这两个结果是一样的):

path1 = os.path.dirname(os.path.abspath(__file__))
print(path1)
# E:/program_software/Pycharm/ytb/ytb_api/api path2 = os.path.abspath(os.path.dirname(__file__))
print(path2)
# E:/program_software/Pycharm/ytb/ytb_api/api

如果看过些源码的话,会发现很多源码都这么用:

总结一下:

「当前文件路径」用  os.path.abspath(os.path.dirname(__file__))

「当前工作路径」用 os.path.abspath(os.path.dirname(os.getcwd()))

谢谢各位看官。

  

python慎用os.getcwd() ,除非你知道【文件路径与当前工作路径的区别】的更多相关文章

  1. python 将os.getcwd()获取路径中的\替换成\\

    通过os.getcwd()获取的路径为:D:\Auto\test\mobule,实际需要修改为:D://Auto//test//mobule 代码实现如下: import osb = os.getcw ...

  2. 使用python内置模块os和openpyxl搜索指定文件夹下Excel中的内容

    在指定路径下,搜索Excel文件中包含的指定内容,首先需要遍历指定路径,得到该路径下所有Excel文件的绝对/相对路径:然后读取Excel中内容,将文件中的每个单元格的值与要搜索的内容进行判断(正则比 ...

  3. 【python】os.getcwd和getcwdu

    print os.getcwd(), type(os.getcwd()) print os.getcwdu(), type(os.getcwdu()) 结果如下: C:\Users\Administr ...

  4. [tools]notepad++当前文件路径不是工作路径

    Time:2015/04/09 描述: 在notepad++中运行lua,工作路径不是当前文件的路径,而是notepad++的安装目录 修改: 把差将中的NppExec --> Follow $ ...

  5. python中os.walk浏览目录和文件

    #!/usr/bin/env python # 2.py # use UTF-8 # Python 3.3.0 # os.walk()的使用 import os # 枚举dirPath目录下的所有文件 ...

  6. python常用标准库(os系统模块、shutil文件操作模块)

    常用的标准库 系统模块 import os 系统模块用于对系统进行操作. 常用方法 os模块的常用方法有数十种之多,本文中只选出最常用的几种,其余的还有权限操作.文件的删除创建等详细资料可以参考官方文 ...

  7. os.getcwd()、sys.path[0]、sys.argv[0]和__file__的区别,终于弄清楚了

    os.getcwd().sys.path[0].sys.argv[0]和__file__的区别 要分清这几个的区别与使用条件,实际测试一下是最准确的. 设计测试方法: 一个主模块用来运行,一个子模块用 ...

  8. python中os模块

    os  模块 操作系统模块,该模块主要处理与操作系统相关的操作 最常用是文件操作:打开.读取 import os os.getcwd() #获取当前执行文件夹路径 ​ os.chdir('dirnam ...

  9. python之os模块使用

    python中os模块的常用语法 1.查看当前路径及路径下的目录 os.getcwd():返回当前路径(不包括文件名) os.listdir():返回当前路径下的所有目录列表. os.listdir( ...

随机推荐

  1. C# 基础知识系列-7 Linq详解

    前言 在上一篇中简单介绍了Linq的入门级用法,这一篇尝试讲解一些更加深入的使用方法,与前一篇的结构不一样的地方是,这一篇我会先介绍Linq里的支持方法,然后以实际需求为引导,分别以方法链的形式和类S ...

  2. Django安装和使用

    Django安装 安装Django Python3在线安装Django pip3 install Django 验证是否安装成功,并查看当前版本 python -m django --version ...

  3. Python语言上机题实现方法(持续更新...)

    Python语言上机题实现方法(持续更新...) 1.[字符串循环左移]给定一个字符串S,要求把S的前k个字符移动到S的尾部,如把字符串"abcdef"前面的2个字符'a'.'b' ...

  4. shell重定向输出的应用

                         shell重定向输出的应用 案例2:重定向输出的应用 2.1问题 本例要求编写一个脚本/root/out.sh,功能特性如下: 执行此脚本显示I love s ...

  5. Thinkphp6源码分析之解析,Thinkphp6路由,Thinkphp6路由源码解析,Thinkphp6请求流程解析,Thinkphp6源码

    Thinkphp6源码解析之分析 路由篇-请求流程 0x00 前言: 第一次写这么长的博客,所以可能排版啊,分析啊,什么的可能会比较乱.但是我大致的流程已经觉得是说的够清楚了.几乎是每行源码上都有注释 ...

  6. 数据结构-Python 列表(List)

    列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现 一.列表常用方法 1.创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可. eg:list1 = ['1', ' ...

  7. js骚操作骂人不带脏

    前言 很多小伙伴们觉得javaScript很简单,下面的这行 javaScript代码可能会让你怀疑人生. (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ...

  8. Python 1基础语法一(注释、行与缩进、多行语句、空行和代码组)

    一.注释Python中单行注释以 # 开头,实例如下: # 第一个注释 print ("Hello, Python!") # 第二个注释 输出结果为: ============== ...

  9. 31.2 try finally使用

    package day31_exception; import java.io.FileWriter; import java.io.IOException; import java.lang.Exc ...

  10. Linux kernel min/max宏

    #define min(x,y) ({ \ typeof(x) _x = (x); \ typeof(y) _y = (y); \ (void) (&_x == &_y); \ _x ...