python获取当前文件和目录路径的方法详解

2025-01-02 15:50

本文主要是介绍python获取当前文件和目录路径的方法详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp...

例子的目录结构如下:

python获取当前文件和目录路径的方法详解

当前目录为pythontest,目录下有两个文件夹1,2和两个文件test.py,test1.ipynb,文件夹1下面有一个tejavascriptst1.txt,文件夹2下面的test2.txt是指向文件夹1下test1.txt的软链接。 后面程序是写在test1.py文件中的

1、获取当前文件路径

  • 通过python内置关键字__file__获取
import sys
import os

if __name__ == "__main__":
    print("__file__ :", __file__)
    print(os.path.abspath(__file__))
    print(os.path.realpath(__file__))

进入pythontest目录下,终端运行命令python test1.py,输出结果:

python获取当前文件和目录路径的方法详解

  • 通过执行程序的命令第一个参数sys.argv[0]获取
import sys
import os

if __name__ == "__main__":
    print("第一个参数:", sys.argv[0])
    print(os.path.abspath(sys.argv[0]))
    print(os.path.realpath(sys.argv[0]))

进入pythontest目录下,终端运行命令python test1.py,输出结果:

python获取当前文件和目录路径的方法详解

2、获取当前文件所在目录

可通过如下几种方式获取:

import sys
import os

if __name__ == "__main__":
    print(os.path.dirname(__file__))
    print(os.getcwd())
    print(os.path.abspath('.'))
    print(os.path.abspath(os.curdir))

进入pythontest目录下,终端运行命令python test1.py,输出结果:

python获取当前文件和目录路径的方法详解

3、os.path.abspath和os.path.realpath有什么区别?

对于普通文件,两者没什么区别,都是返回当前文件的绝对路径,如上面的test1.py;但是若文件是软连接或者快捷方式时,javascriptos.path.realpath返回真实文件的路径,如下面的例子,文件夹2下面的test2.txt是指向文件夹1下test1.txt的软链接,两个函数则返回不同的路径。

import sys
import os

if __name__ == "__main__":
    print(os.path.abspath("/home/jovyan/project/pythontest/2/test2.txt"))
    print(os.path.realpath("/home/jovyan/project/pythontest/2/test2.txt"))

进入pythontest目录下,终端运行命令python test1.py,输出结果:

python获取当前文件和目录路径的方法详解

4、使用os.path.abspath和os.path.realpath需注意

使用这两个函数时需注意路径需要完整,不然会返回一个错误的’绝对路径’,如下,遍历当前目录下所有文件:

import sys
import os

if __name__ == "__main__":
    for i in os.listdir(os.path.dirname(__file__)):
        print("1级目录:", i)
        if os.path.isdir(os.path.join(os.path.dirname(__file__), i)):
            for j in os.listdir(os.path.join(os.path.dirname(__file__), i)):
                print("2级目录:", j)
                print(os.path.abspath(j))      # 这里j不是一个完整路径,只是一个文件名,结果会返回一个错误的'绝对路径'
                print(os.path.realpath(j))
                print(os.path.abspath(os.path.join(os.path.dirname(__file__), i, j)))
                print(os.path.realpath(os.path.join(os.path.dirname(__file__), i, j)))

进入pythontest目录下,终端运行命令python test1.py,输出结果:

python获取当前文件和目录路径的方法详解

5、关于sys.path

sys.path返回一个list,python中对list的操作均可以对sys.path操作,常见有insert, append这些。

import sys
import os

if __name__ == "__main_China编程_":
 http://www.chinasem.cn   print("==> before:")
    print(sys.path)
    sys.path.insert(0, os.path.dirname(__file__))   #将当前文件目录插入在path搜索路径的第一个位置
    sys.path.append(os.path.dirname(__file__))  #将当前文件目录添加在path搜索路径的最后
    print("==> after:")
    print(sys.path)

进入pythontest目录下,终端运行命令python test1.py,输出结果:

python获取当前文件和目录路径的方法详解

总结 

到此这篇关于python获取当前文件和目录路径的文章就介绍到这了,更多相关python获取当前文件和目录路径内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于python获取当前文件和目录路径的方法详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1152900

相关文章

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

Python读取TIF文件的两种方法实现

《Python读取TIF文件的两种方法实现》本文主要介绍了Python读取TIF文件的两种方法实现,包括使用tifffile库和Pillow库逐帧读取TIFF文件,具有一定的参考价值,感兴趣的可以了解... 目录方法 1:使用 tifffile 逐帧读取安装 tifffile:逐帧读取代码:方法 2:使用

Perl 特殊变量详解

《Perl特殊变量详解》Perl语言中包含了许多特殊变量,这些变量在Perl程序的执行过程中扮演着重要的角色,:本文主要介绍Perl特殊变量,需要的朋友可以参考下... perl 特殊变量Perl 语言中包含了许多特殊变量,这些变量在 Perl 程序的执行过程中扮演着重要的角色。特殊变量通常用于存储程序的

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

Java子线程无法获取Attributes的解决方法(最新推荐)

《Java子线程无法获取Attributes的解决方法(最新推荐)》在Java多线程编程中,子线程无法直接获取主线程设置的Attributes是一个常见问题,本文探讨了这一问题的原因,并提供了两种解决... 目录一、问题原因二、解决方案1. 直接传递数据2. 使用ThreadLocal(适用于线程独立数据)

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

springcloud之FeignClient使用详解

《springcloud之FeignClient使用详解》Feign是一种声明式、模板化的HTTP客户端,可以简化微服务之间的远程过程调用,通过Feign,开发者可以像调用本地方法一样调用远程服务,而... 目录前言业务场景架构说明调用逻辑1、A-FeignClient2、A微服务3、B微服务小结前言在微

python中json.dumps和json.dump区别

《python中json.dumps和json.dump区别》json.dumps将Python对象序列化为JSON字符串,json.dump直接将Python对象序列化写入文件,本文就来介绍一下两个... 目录1、json.dumps和json.dump的区别2、使用 json.dumps() 然后写入文