Joh*_*ard 2007 python directory
在Python中,我可以使用哪些命令来查找:
Rus*_*ias 3144
要获取包含Python文件的目录的完整路径,请在该文件中写入:
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
Run Code Online (Sandbox Code Playgroud)
(请注意,如果您已经习惯os.chdir()更改当前工作目录,则上述咒语将不起作用,因为__file__常量的值是相对于当前工作目录的,并且不会被os.chdir()调用更改.)
要使用当前工作目录
import os
cwd = os.getcwd()
Run Code Online (Sandbox Code Playgroud)
上面使用的模块,常量和函数的文档参考:
os和os.path模块.__file__常数os.path.realpath(path)(返回"指定文件名的规范路径,消除路径中遇到的任何符号链接")os.path.dirname(path)(返回"路径名的目录名path")os.getcwd()(返回"表示当前工作目录的字符串")os.chdir(path)("将当前工作目录更改为path")Nix*_*Nix 311
当前工作目录: os.getcwd()
该__file__属性 可以帮助您找出正在执行的文件所在的位置.这篇SO帖子解释了一切: 如何在Python中获取当前执行文件的路径?
Dan*_*eis 267
您可能会发现这有用作为参考:
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))
Run Code Online (Sandbox Code Playgroud)
sko*_*kin 72
pathlib模块,在Python 3.4(PEP 428 - pathlib模块 - 面向对象的文件系统路径)中引入,使路径相关的体验更好.
$ pwd
/home/skovorodkin/stack
$ tree
.
??? scripts
??? 1.py
??? 2.py
Run Code Online (Sandbox Code Playgroud)
为了获得当前的工作目录Path.cwd():
from pathlib import Path
print(Path.cwd()) # /home/skovorodkin/stack
Run Code Online (Sandbox Code Playgroud)
要获取脚本文件的绝对路径,请使用Path.resolve()方法:
print(Path(__file__).resolve()) # /home/skovorodkin/stack/scripts/1.py
Run Code Online (Sandbox Code Playgroud)
要获取脚本所在目录的路径,请访问.parent(建议.resolve()之前调用.parent):
print(Path(__file__).resolve().parent) # /home/skovorodkin/stack/scripts
Run Code Online (Sandbox Code Playgroud)
请记住,__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')
Run Code Online (Sandbox Code Playgroud)
如您所见open(p),不适用于Python 3.5.
PEP 519 - 添加一个在Python 3.6中实现的文件系统路径协议,增加了PathLike对象的支持open,所以现在你可以直接将Path对象传递给open函数:
$ python3.6 scripts/2.py
OK
Run Code Online (Sandbox Code Playgroud)
小智 58
1.获取当前目录的完整路径
>>import os
>>print os.getcwd()
Run Code Online (Sandbox Code Playgroud)
o/p:"C:\ Users\admin\myfolder"
1.单独获取当前目录文件夹名称
>>import os
>>str1=os.getcwd()
>>str2=str1.split('\\')
>>n=len(str2)
>>print str2[n-1]
Run Code Online (Sandbox Code Playgroud)
O/P: "MyFolder文件"
小智 38
如果您要查找当前所在文件的当前目录:
OS不可知的方式:
dirname, filename = os.path.split(os.path.abspath(__file__))
Run Code Online (Sandbox Code Playgroud)
Bla*_*g23 28
回答#1:
如果您想要当前目录,请执行以下操作:
import os
os.getcwd()
Run Code Online (Sandbox Code Playgroud)
如果您只想要任何文件夹名称,并且您拥有该文件夹的路径,请执行以下操作:
def get_folder_name(folder):
'''
Returns the folder name, given a full folder path
'''
return folder.split(os.sep)[-1]
Run Code Online (Sandbox Code Playgroud)
回答#2:
import os
print os.path.abspath(__file__)
Run Code Online (Sandbox Code Playgroud)
Sto*_*dow 27
派对有点晚了,但我认为找到当前执行上下文名称的最简洁方法是
current_folder_path, current_folder_name = os.path.split(os.getcwd())
Run Code Online (Sandbox Code Playgroud)
Mat*_* C. 19
可以使用Pathlib来获取包含当前脚本的目录:
import pathlib
filepath = pathlib.Path(__file__).resolve().parent
Run Code Online (Sandbox Code Playgroud)
Ili*_* S. 18
要获取当前目录的完整路径:
os.path.realpath( '')
对于问题1使用os.getcwd() # get working dir和os.chdir(r'D:\Steam\steamapps\common') # set working dir
我建议使用sys.argv[0]问题2,因为它sys.argv是不可变的,因此总是返回当前文件(模块对象路径)而不受影响os.chdir().你也可以这样做:
import os
this_py_file = os.path.realpath(__file__)
# vvv Below comes your code vvv #
Run Code Online (Sandbox Code Playgroud)
但是,sys.argv[0]当PyInstaller编译时,该片段将无效或无法正常工作,因为魔法属性未在__main__级别中设置,并且sys.argv[0]是您调用exe的方式(意味着它会受到工作目录的影响).
| 归档时间: |
|
| 查看次数: |
2728873 次 |
| 最近记录: |