当你搜索 "获取当前文件路径" 时,有的文章会提到用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. 如何测试Linux命令运行时间?

    良许在工作中,写过一个 Shell 脚本,这个脚本可以从 4 个 NTP 服务器轮流获取时间,然后将最可靠的时间设置为系统时间. 因为我们对于时间的要求比较高,需要在短时间内就获取到正确的时间.所以我 ...

  2. [vijos1234]口袋的天空<最小生成树>

    题目链接:https://vijos.org/p/1234 白天刚刚写完prim的算法,晚上就心血来潮的打了一道最小生成树的题 虽然有题解说可以用prim做,但是这道题明显是加最小的边,感觉krusk ...

  3. 2.1.JVM的垃圾回收机制,判断对象是否死亡

    因为热爱,所以坚持. 文章下方有本文参考电子书和视频的下载地址哦~ 这节我们主要讲垃圾收集的一些基本概念,先了解垃圾收集是什么.然后触发条件是什么.最后虚拟机如何判断对象是否死亡. 一.前言   我们 ...

  4. (3)SQL Server表分区

    1.简介 当一个表数据量很大时候,很自然我们就会想到将表拆分成很多小表,在执行查询时候就到各个小表去查,最后汇总数据集返回给调用者加快查询速度.比如电商平台订单表,库存表,由于长年累月读写较多,积累数 ...

  5. NKOJ3772 看电影

    问题描述 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l<=r<= ...

  6. 原生js弹力球

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. AbstractQueuedSynchronizer概述

    AbstractQueuedSynchronizer 是一个用于在竞争资源(如多线程)时使用的同步器,它内部使用了一个int类型的字段status表示需要同步的资源状态, 并基于一个先进先出(FIFO ...

  8. DALI开关

    DALI开关简介 一:符合协议IEC 62386 二:DALI总线取电,低压操作,安全可靠 三:可以开,关,调光,调色温 四:DALI总线取电,低压操作,安全可靠 五:可按压开,关,旋转调光,调光器耐 ...

  9. Scratch 第2课淘气男孩儿

    素材及视频下载 链接:https://pan.baidu.com/s/1qX0T2B_zczcLaCCpiRrsnA提取码:xfp8

  10. 微信小程序动态修改页面标题setNavigationBarTitle

    微信小程序是可以动态修改页面标题的. 首先我们来看看静态是怎么实现的 在对应页面的json文件里面加入下面代码就可以实现了 { "navigationBarTitleText": ...