如何获取当前文件的目录路径? 我试着:
>>> os.path.abspath(__file__)
'C:\\python27\\test.py'
但我想:
'C:\\python27\\'
如何获取当前文件的目录路径? 我试着:
>>> os.path.abspath(__file__)
'C:\\python27\\test.py'
但我想:
'C:\\python27\\'
特殊变量__file__包含当前文件的路径。由此,我们可以使用pathlib或os获取目录。路径模块。
Python 3
对于正在运行的脚本的目录:
import pathlib
pathlib.Path(__file__).parent.resolve()
对于当前工作目录:
import pathlib
pathlib.Path().resolve()
Python 2和3
对于正在运行的脚本的目录:
import os
os.path.dirname(os.path.abspath(__file__))
如果你指的是当前工作目录:
import os
os.path.abspath(os.getcwd())
注意,文件的前后是两个下划线,而不是一个。
还要注意,如果你是交互式运行的,或者从文件以外的东西(例如:数据库或在线资源)加载代码,__file__可能不会被设置,因为没有“当前文件”的概念。上面的答案假设运行文件中的python脚本是最常见的场景。
参考文献
python文档中的Pathlib。 操作系统。Python 2.7, os. pathpath - Python 3 操作系统。getcwd - Python 2.7, os。3 . getcwd - Python __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
从Python 3开始,推荐使用pathlib中的Path:
from pathlib import Path
print("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 os
def 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 directory
mypath = 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 method
filePath = mypath/'data'/'fuel_econ.csv'
print('File path : {}'.format(filePath))
#To check if file present in that directory or Not
isfileExist = filePath.exists()
print('isfileExist : {}'.format(isfileExist))
#To check if the path is a directory or a File
isadirectory = filePath.is_dir()
print('isadirectory : {}'.format(isadirectory))
#To get the extension of the file
fileExtension = mypath/'data'/'fuel_econ.csv'
print('File extension : {}'.format(filePath.suffix))
输出: 绝对路径是放置python文件的路径
绝对路径:D:\Study\Machine Learning\Jupitor Notebook\JupytorNotebookTest2\Udacity_Scripts\Matplotlib和seaborn Part2
文件路径:D:\Study\Machine Learning\Jupitor Notebook\JupytorNotebookTest2\Udacity_Scripts\Matplotlib and seaborn Part2\data\ fuel_econc .csv
isfileExist: True
isadirectory: False
文件扩展名:.csv
我发现以下命令返回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 answer
dir3 = Path(__file__).parent.absolute() #See @Arminius answer
dir4 = Path(__file__).parent
print(f'dir1={dir1}\ndir2={dir2}\ndir3={dir3}\ndir4={dir4}')
讲话! !
Dir1和dir2仅在运行位于当前工作目录中的脚本时有效,但在任何其他情况下都将中断。 假设Path(__file__).is_absolute()为True,在dir3中使用.absolute()方法显得多余。 最短的命令是dir4。
解释链接:.resolve(), .absolute(), Path(file).parent().absolute()
Python 2和3
你还可以简单地做:
from os import sep
print(__file__.rsplit(sep, 1)[0] + sep)
输出如下:
C:\my_folder\sub_folder\
这可以在没有模块的情况下完成。
def get_path():
return (__file__.replace(f"<your script name>.py", ""))
print(get_path())
也适用于__file__不可用的情况(jupyter笔记本)
import sys
from pathlib import Path
path_file = Path(sys.path[0])
print(path_file)
还使用了pathlib,这是python 3中处理路径的面向对象的方式。