提问




    这个问题在这里已有答案:

    

            

  •             如何正确确定当前脚本目录?
                    
                        12个答案
                    
            

  •         

  •             如何知道/更改Python shell中的当前目录?
                    
                        6个答案
                    
            

  •     

最佳参考


要获取包含Python文件的目录的完整路径,请在该文件中写入:/questions/3718657/how-to-properly-determine-current-script-directory /questions/8248397/how-to-know-change-current-directory-in-python-shell


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


(请注意,如果您已经使用os.chdir()更改当前工作目录,则上述咒语将无效,因为__file__常量的值相对于当前工作目录而未更改通过os.chdir()电话。)





要使用当前工作目录


import os
cwd = os.getcwd()





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



  • osos.path模块。

  • __file__常数

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

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

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

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


其它参考1


当前工作目录:os.getcwd()[66] [67] [68] [69] [70] [71] [72] [73]


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

其它参考2


您可能会发现这有用作为参考:


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))

其它参考3


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文件

其它参考4


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


OS不可知的方式:


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

其它参考5


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

其它参考6


派对有点晚了,但我认为找到当前执行上下文名称的最简洁方法是


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

其它参考7


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


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

其它参考8


pathlib模块,在Python 3.4中引入(PEP 428 - pathlib模块 - 面向对象的文件系统路径),使路径相关的体验更好。[77] [78] [79]


$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
    ├── 1.py
    └── 2.py


为了获得当前的工作目录Path.cwd():[80]


from pathlib import Path

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


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


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


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


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()方法,但后一个选项要求您更改旧代码:[84] [85] [86]


$ 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函数直接:[87] [88] [89]


$ python3.6 scripts/2.py
OK

其它参考9


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

其它参考10


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




  os.path.realpath( )


其它参考11


可以使用Pathlib来获取包含当前脚本的目录:


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

其它参考12


问题1使用os.getcwd() # get working diros.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__级别设置,sys.argv[0]是你的exe被调用的方式(意味着它受到工作目的的影响)。

其它参考13


对于在python中获取和设置工作目录。您可以使用以下代码:


输入口
cwd=os.getcwd()#for获取工作目录

其它参考14


为了查看以下脚本的当前工作目录类型:


import os
current_working_directory = os.getcwd()