python查找当前路径_关于python:查找当前目录和文件目录

本问题已经有最佳答案,请猛点这里访问。

在python中,我可以使用哪些命令来查找:

当前目录(运行python脚本时我在终端中的位置),以及

我正在执行的文件在哪里?

不是"如何在python中获取当前目录的完整路径"的副本。因为这个问题还要求输入当前的工作目录,而不是。

所以有两个问题

要获取包含python文件的目录的完整路径,请将其写入该文件:

import os

dir_path = os.path.dirname(os.path.realpath(__file__))

(注意,如果您已经使用os.chdir()来更改当前的工作目录,上面的咒语将不起作用,因为__file__常量的值与当前的工作目录相关,并且不会被os.chdir()调用更改。)

要获取当前工作目录,请使用

import os

cwd = os.getcwd()

上述模块、常量和函数的文档参考:

os和os.path模块。

__file__常数

os.path.realpath(path)(返回"指定文件名的规范路径,消除路径中遇到的任何符号链接")。

os.path.dirname(path)(返回路径名path的目录名)

os.getcwd()(返回"表示当前工作目录的字符串")

os.chdir(path)(将当前工作目录改为path)

我讨厌用这个附加到sys.path。我现在觉得很脏。

如果从IDE调用文件(比如说空闲),则该文件将不起作用。建议os.path.realpath("./")或os.getcwd()。这里最好的答案是:stackoverflow.com/questions/263219/…

@Neon22可能适合某些需求,但我认为应该注意到,这些东西根本不一样-文件可能在工作目录之外。

颠倒顺序怎么样,重要吗?os.path.realpath(os.path.dirname(__file__))

@当使用dirname反转realpath时,moberg通常路径相同,但当文件(或其目录)实际上是符号链接时,路径不同。

它得到一个错误NameError: name '__file__' is not defined。如何解决这个问题?

显然,根据文件,提前支付sys.path是可以接受的。

在某些版本的python 2(主要是windows版本)中,包含utf-8字符(如emojis)的路径将返回两个问号,用以替换OS函数中的字符,从而使您尝试的任何进一步命令变得混乱。

当前工作目录:os.getcwd()。

__file__属性可以帮助您找到正在执行的文件所在的位置。这篇文章解释了所有的事情:我如何在python中获取当前执行文件的路径?

您可能会发现这是一个有用的参考:

import os

print("Path at terminal when executing this file")

print(os.getcwd() +"

")

print("This file path, relative to os.getcwd()")

print(__file__ +"

")

print("This file full path (following symlinks)")

full_path = os.path.realpath(__file__)

print(full_path +"

")

print("This file directory and name")

path, filename = os.path.split(full_path)

print(path + ' --> ' + filename +"

")

print("This file directory only")

print(os.path.dirname(full_path))

这里的__file__是什么意思?它对我不起作用。

__file__是module对象的一个属性。您需要在python文件中运行代码,而不是在repl上。

1.获取当前目录的完整路径

>>import os

>>print os.getcwd()

O/P:"C:usersadminmyfolder"

1.单独获取当前目录文件夹名称

>>import os

>>str1=os.getcwd()

>>str2=str1.split('\')

>>n=len(str2)

>>print str2[n-1]

O/P:"MyF夹"

我想最好是一句话:os.getcwd().split('\\')[-1]。

对于Windows,最好使用os.sep而不是硬编码:os.getcwd().split(os.sep)[-1]

这种方法的问题是,如果您从不同的目录执行脚本,您将得到该目录的名称而不是脚本,这可能不是您想要的。

对,承载文件的当前目录可能不是您的CWD

python 3.4中引入的pathlib模块(pep 428—pathlib模块—面向对象的文件系统路径)使路径相关的体验更好。

$ pwd

/home/skovorodkin/stack

$ tree

.

└── scripts

├── 1.py

└── 2.py

要获得当前工作目录,请使用Path.cwd():

from pathlib import Path

print(Path.cwd())  # /home/skovorodkin/stack

要获得脚本文件的绝对路径,请使用Path.resolve()方法:

print(Path(__file__).resolve())  # /home/skovorodkin/stack/scripts/1.py

要获取脚本所在目录的路径,请访问.parent(建议在.parent之前调用.resolve():

print(Path(__file__).resolve().parent)  # /home/skovorodkin/stack/scripts

记住,在某些情况下,__file__是不可靠的:如何在python中获取当前执行文件的路径?.

请注意,Path.cwd()、Path.resolve()和其他Path方法返回路径对象(在我的例子中是PosixPath),而不是字符串。在python 3.4和3.5中,由于open内置函数只能处理字符串或字节对象,不支持Path对象,因此必须将Path对象转换为字符串或使用Path.open()方法,但后者要求您更改旧代码:

$ cat scripts/2.py

from pathlib import Path

p = Path(__file__).resolve()

with p.open() as f: pass

with open(str(p)) as f: pass

with open(p) as f: pass

print('OK')

$ python3.5 scripts/2.py

Traceback (most recent call last):

File"scripts/2.py", line 11, in

with open(p) as f:

TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')

如您所见,open(p)不适用于Python3.5。

PEP 519—添加一个在python 3.6中实现的文件系统路径协议,增加了对PathLike对象对open函数的支持,现在可以直接将Path对象传递给open函数:

$ python3.6 scripts/2.py

OK

还请注意,这些方法是可链接的,因此如果需要,可以使用app_path = Path(__file__).resolve().parent.parent.parent作为与../../../的并行。

如果您试图查找当前所在文件的当前目录:

操作系统不可知方式:

dirname, filename = os.path.split(os.path.abspath(__file__))

如果您使用的是python 3.4,那么有一个全新的更高级的pathlib模块,它允许您方便地调用pathlib.Path.cwd()来获取表示当前工作目录的path对象,以及许多其他新功能。

关于这个新API的更多信息可以在这里找到。

对于python版本<3.4,可以使用pathlib2:pypi.python.org/pypi/pathlib2

对第1题的回答:

如果需要当前目录,请执行以下操作:

import os

os.getcwd()

如果只需要任何文件夹名,并且您有该文件夹的路径,请执行以下操作:

def get_folder_name(folder):

'''

Returns the folder name, given a full folder path

'''

return folder.split(os.sep)[-1]

对第2题的回答:

import os

print os.path.abspath(__file__)

我不知道你怎么不竖起大拇指。

参加聚会有点晚,但我认为找到当前执行上下文名称的最简单方法是

current_folder_path, current_folder_name = os.path.split(os.getcwd())

pathlib可以用这种方式获取包含当前脚本的目录:

import pathlib

filepath = pathlib.Path(__file__).resolve().parent

我喜欢这个解决方案。但是,可能会导致一些python 2.x问题。

对于python 3.3和更早版本的pathlib,必须安装

@Kimmo使用python 2代码的唯一原因是将其转换为python 3。

@卡尼里克同意了,但还是有人不同意。我用python 3.6编写了所有的新东西,包括格式化的字符串文字(pep 498),这样就不会有人把它们推到python2。

还请注意,这些方法是可链接的,因此如果需要,可以使用app_path = Path(__file__).resolve().parent.parent.parent作为与../../../的并行。

要获取当前目录的完整路径:

os.path.realpath('.')

这一个在Jupyter-Ipython笔记本内工作(&180;"uuu文件"&180;getcwd不会)

仍然有效。感谢未来@oliverzendel!

我正在远程处理一个jupyter笔记本:os.getcwd()和'os.path.realpath('.')返回完全相同的字符串路径。

如果要搜索当前执行脚本的位置,可以使用sys.argv[0]获取完整路径。

这是错误的。sys.argv[0]不需要包含执行脚本的完整路径。

要查看当前工作目录,请键入以下脚本:

import os

current_working_directory = os.getcwd()

不使用PEP-8变量命名标准(蛇形大小写而不是驼形大小写)。

对于问题1,使用os.getcwd() # get working dir和os.chdir(r'D:\Steam\steamapps\common') # set working dir。

我建议对问题2使用sys.argv[0],因为sys.argv是不可变的,因此总是返回当前文件(模块对象路径),而不受os.chdir()的影响。你也可以这样做:

import os

this_py_file = os.path.realpath(__file__)

# vvv Below comes your code vvv #

但当pyinstaller编译时,该代码段和sys.argv[0]将不工作或不工作,因为在__main__级别中没有设置magic属性,而sys.argv[0]是调用exe的方式(意味着它会受到工作目录的影响)。

在python中获取工作目录。您可以使用以下代码:

import os

cwd = os.getcwd() #to get current working directory

print(cwd)

几年前发布的相同答案有什么问题?

你可以标记"复制"这个问题。@科雷戈德伯格,今年我给出了这个答案,我不知道相同的问题。

你可能感兴趣的:(python查找当前路径)