查找当前目录和文件目录

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

  1. 当前目录(运行 Python 脚本时我在终端中的位置),以及
  2. 我正在执行的文件在哪里?

答案

要获取包含 Python 文件的目录的完整路径,请在该文件中写入以下内容:

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

(请注意,如果您已经使用os.chdir()更改了当前工作目录,则上述方法将不起作用,因为__file__常量的值是相对于当前工作目录的,并且不会被os.chdir()更改os.chdir()调用。)


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

import os
cwd = os.getcwd()

上面使用的模块,常量和函数的文档参考:

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

__file__属性可以帮助您找出正在执行的文件的位置。这样的 SO 帖子解释了所有内容: 如何获取 Python 中当前执行文件的路径?

您可能会发现这对参考很有用:

import os

print("Path at terminal when executing this file")
print(os.getcwd() + "\n")

print("This file path, relative to os.getcwd()")
print(__file__ + "\n")

print("This file full path (following symlinks)")
full_path = os.path.realpath(__file__)
print(full_path + "\n")

print("This file directory and name")
path, filename = os.path.split(full_path)
print(path + ' --> ' + filename + "\n")

print("This file directory only")
print(os.path.dirname(full_path))

在 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 (建议调用.resolve()之前.parent ):

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 <module>
    with open(p) as f:
TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')

如您所见, open(p)不适用于 Python 3.5。

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

$ python3.6 scripts/2.py
OK

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

>>import os
    >>print os.getcwd()

o / p:“C:\ Users \ admin \ myfolder”

1. 仅获取当前目录的文件夹名称

>>import os
    >>str1=os.getcwd()
    >>str2=str1.split('\\')
    >>n=len(str2)
    >>print str2[n-1]

o / p:“myfolder”

如果要查找文件的当前目录,则当前位于:

操作系统不可知的方式:

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

如果您使用的是 Python 3.4,则有一个全新的高级pathlib模块,该模块可让您方便地调用pathlib.Path.cwd()以获取代表您当前工作目录的Path对象,以及许多其他新功能。

可以在此处找到有关此新 API 的更多信息。

回答#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