有没有一种简单的方法可以使用一行代码在 python 中上移一个目录?类似于cd ..
命令行的东西
问问题
144930 次
8 回答
95
>>> import os
>>> print os.path.abspath(os.curdir)
C:\Python27
>>> os.chdir("..")
>>> print os.path.abspath(os.curdir)
C:\
于 2013-07-26T15:39:55.937 回答
42
使用os.chdir
应该工作:
import os
os.chdir('..')
于 2013-07-26T15:39:30.580 回答
15
显然 os.chdir('..') 是正确的答案。但仅供参考,如果将来您遇到必须广泛操作目录和路径的情况,这里有一个很棒的包(Unipath),它可以让您将它们视为 Python 对象:https ://pypi.python.org/pypi /单路径
这样你就可以做这样的事情:
>>> from unipath import Path
>>> p = Path("/usr/lib/python2.5/gopherlib.py")
>>> p.parent
Path("/usr/lib/python2.5")
>>> p.name
Path("gopherlib.py")
>>> p.ext
'.py'
于 2013-07-26T15:47:39.993 回答
13
好吧..我不确定 os.chdir('..') 的便携性如何。在 Unix 下,这些是真实的文件名。我更喜欢以下内容:
import os
os.chdir(os.path.dirname(os.getcwd()))
这将获取当前工作目录,升级一个目录,然后更改到该目录。
于 2013-07-26T16:13:26.037 回答
1
虽然这并不是 OP 的意思,因为这不是超级简单,但是,当从 Notepad++ 运行脚本时,该os.getcwd()
方法无法按预期工作。这就是我要做的:
import os
# get real current directory (determined by the file location)
curDir, _ = os.path.split(os.path.abspath(__file__))
print(curDir) # print current directory
定义一个这样的函数:
def dir_up(path,n): # here 'path' is your path, 'n' is number of dirs up you want to go
for _ in range(n):
path = dir_up(path.rpartition("\\")[0], 0) # second argument equal '0' ensures that
# the function iterates proper number of times
return(path)
这个函数的使用相当简单——你所需要的只是你的路径和目录数量。
print(dir_up(curDir,3)) # print 3 directories above the current one
唯一的缺点是它不会在驱动器号上停止,它只会显示空字符串。
于 2020-02-10T10:48:15.507 回答
0
将 Kim 的答案与 os 结合起来:
p=Path(os.getcwd())
os.chdir(p.parent)
于 2020-10-09T05:14:26.333 回答
0
向上移动多个目录的一种方便方法是pathlib
:
from pathlib import Path
full_path = "C:\Program Files\Python37\lib\pathlib.py"
print(Path(full_path).parents[0])
print(Path(full_path).parents[1])
print(Path(full_path).parents[2])
print(Path(full_path).parents[3])
print([str(Path(full_path).parents[i]) for i in range(4)])
输出:
C:\Program Files\Python37\lib
C:\Program Files\Python37
C:\Program Files
C:\
['C:\\Program Files\\Python37\\lib', 'C:\\Program Files\\Python37', 'C:\\Program Files', 'C:\\']
于 2021-12-01T09:59:13.747 回答