如何获取当前文件目录的完整路径?

如何获取当前文件的目录路径?我试过了:

>>> os.path.abspath(__file__)'C:\\python27\\test.py'

但我想要:

'C:\\python27\\'
2166296 次浏览

特殊变量#0包含当前文件的路径。从中我们可以使用#1#2模块获取目录。

python3

对于正在运行的脚本的目录:

import pathlibpathlib.Path(__file__).parent.resolve()

对于当前工作目录:

import pathlibpathlib.Path().resolve()

python2和3

对于正在运行的脚本的目录:

import osos.path.dirname(os.path.abspath(__file__))

如果您是指当前工作目录:

import osos.path.abspath(os.getcwd())

请注意,file之前和之后是两个下划线,而不仅仅是一个。

另请注意,如果您以交互方式运行或从文件以外的东西(例如:数据库或在线资源)加载代码,则可能不会设置__file__,因为没有“当前文件”的概念。上述答案假设最常见的场景是运行文件中的python脚本。

参考文献

  1. Pathlib在python留档。
  2. os.pathPython 2.7os.path-Python 3
  3. os.getcwdPython 2.7os.getcwd-Python 3
  4. __file__变量是什么意思/做什么?
import osprint(os.path.dirname(__file__))

IPython有一个神奇的命令%pwd来获取当前的工作目录。它可以通过以下方式使用:

from IPython.terminal.embed import InteractiveShellEmbed
ip_shell = InteractiveShellEmbed()
present_working_directory = ip_shell.magic("%pwd")

在IPython上,Jupyter Notebook%pwd可以直接使用如下:

present_working_directory = %pwd

使用Path from#1是自Python 3以来推荐的方法:

from pathlib import Pathprint("File      Path:", Path(__file__).absolute())print("Directory Path:", Path().absolute()) # Directory of current working directory, not __file__

备注:如果使用Jupyter Notebook,__file__不会返回期望值,因此必须使用Path().absolute()

我在CGI中的IIS下运行python以获取当前文件夹时使用了一个函数:

import osdef getLocalFolder():path=str(os.path.dirname(os.path.abspath(__file__))).split(os.sep)return path[len(path)-1]

在Python 3. x中:

from pathlib import Path
path = Path(__file__).parent.absolute()

说明:

  • Path(__file__)是当前文件的路径。
  • .parent为您提供文件所在的目录
  • .absolute()为您提供完全绝对路径。

使用pathlib是使用路径的现代方式。如果出于某种原因稍后需要它作为字符串,请执行str(path)

Python中有用的路径特性:

from pathlib import Path
#Returns the path of the current directorymypath = Path().absolute()print('Absolute path : {}'.format(mypath))
#if you want to go to any other file inside the subdirectories of the directory path got from above methodfilePath = mypath/'data'/'fuel_econ.csv'print('File path : {}'.format(filePath))
#To check if file present in that directory or NotisfileExist = filePath.exists()print('isfileExist : {}'.format(isfileExist))
#To check if the path is a directory or a Fileisadirectory = filePath.is_dir()print('isadirectory : {}'.format(isadirectory))
#To get the extension of the filefileExtension = mypath/'data'/'fuel_econ.csv'print('File extension : {}'.format(filePath.suffix))

输出:绝对路径是放置Python文件的路径

绝对路径:D:\Study\Machine Learning\Jupitor Notebook\JupytorNotebookTest2\Udacity_Scripts\Matplotlibseaborn Part2

文件路径:D:\Study\Machine Learning\Jupitor Notebook\JupytorNotebookTest2\Udacity_Scripts\Matplotlibseaborn Part2\data\fuel_econ.csv

isfileExist: true是否必选

isa目录:假

文件扩展名:. csv

试试这个:

import osdir_path = os.path.dirname(os.path.realpath(__file__))

我发现以下命令返回Python 3脚本的父目录的完整路径。

Python 3脚本:

#!/usr/bin/env python3# -*- coding: utf-8 -*-
from pathlib import Path
#Get the absolute path of a Python3.6 and above script.dir1 = Path().resolve()  #Make the path absolute, resolving any symlinks.dir2 = Path().absolute() #See @RonKalian answerdir3 = Path(__file__).parent.absolute() #See @Arminius answerdir4 = Path(__file__).parent
print(f'dir1={dir1}\ndir2={dir2}\ndir3={dir3}\ndir4={dir4}')

评论!!!!

  1. dir1dir2仅在运行位于当前工作目录中的脚本时有效,但在任何其他情况下都会中断。
  2. 假设Path(__file__).is_absolute()True,那么在迪尔3中使用.absolute()方法似乎是多余的。
  3. 工作的最短命令是迪尔4

说明链接:.解决().绝对()路径(file)。父()。绝对()

python2和3

你也可以简单地做:

from os import sepprint(__file__.rsplit(sep, 1)[0] + sep)

它输出如下内容:

C:\my_folder\sub_folder\