【发布时间】:2013-07-26 23:15:39
【问题描述】:
有没有一种简单的方法可以使用一行代码在 python 中上移一个目录?命令行中类似于cd ..的东西
【问题讨论】:
有没有一种简单的方法可以使用一行代码在 python 中上移一个目录?命令行中类似于cd ..的东西
【问题讨论】:
>>> import os
>>> print os.path.abspath(os.curdir)
C:\Python27
>>> os.chdir("..")
>>> print os.path.abspath(os.curdir)
C:\
【讨论】:
使用os.chdir 应该可以:
import os
os.chdir('..')
【讨论】:
显然 os.chdir('..') 是正确的答案。但仅供参考,如果将来您遇到必须广泛操作目录和路径的情况,这里有一个很棒的包 (Unipath),它可以让您将它们视为 Python 对象:https://pypi.python.org/pypi/Unipath
这样你就可以做这样的事情:
>>> 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'
【讨论】:
嗯.. 我不确定 os.chdir('..') 的便携性如何。在 Unix 下,这些是真实的文件名。我更喜欢以下内容:
import os
os.chdir(os.path.dirname(os.getcwd()))
获取当前工作目录,升级一个目录,然后切换到该目录。
【讨论】:
os.chdir(os.path.pardir) 的输入稍微少一些。这个答案稍微独立于平台,但这有点争议,因为虽然您可以想象一个不将.. 表示为父目录的平台,但任何人当前使用的任何平台(包括 Windows 和 UNIX)都可以以这种方式表示它。
.. 工作正常。我总是对窗户的期望如此之低,但有时确实让我感到惊讶:)。尽管如此,乱七八糟的代码总是困扰着我。
在 Python 3.4 中引入了 pathlib:
>>> from pathlib import Path
>>> p = Path('/etc/usr/lib')
>>> p
PosixPath('/etc/usr/lib')
>>> p.parent
PosixPath('/etc/usr')
它还具有许多其他有用的功能,例如用于使用斜杠连接路径或轻松遍历目录树。
有关更多信息,请参阅docs 或this blog post,其中涵盖了 os.path 和 pathlib 之间的区别。
【讨论】:
虽然这不是 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
唯一的缺点是它不会在驱动器号上停止,它只会显示空字符串。
【讨论】:
将 Kim 的答案与 os 结合起来:
p=Path(os.getcwd())
os.chdir(p.parent)
【讨论】:
向上移动多个目录的便捷方法是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:\\']
【讨论】: