我有这个目录树:
C:ABCDEFmyfile.py
我想为我的软件包插入一个目录,如下所示:
import sys
local_package_dir = 'C:ABCPythonPackages'
sys.path.insert(0, local_package_dir)
我的问题是很多人都在使用各种驱动器名称(D:、E:等(。
如何动态遍历目录并访问ABC
而不关心根级驱动器的名称?
我知道__file__
,但是os
函数的哪种组合可以帮助我达到正确的水平?
看看 pathlib。它是os.path
新的更好的替代品
你可以使用路径作为对象。 .parts 将包含您需要的内容。
import pathlib
p = pathlib.PureWindowsPath('c:/Program Files/PSF')
>>> p.parts
('c:\', 'Program Files', 'PSF')
p = pathlib.PureWindowsPath('c:/A/B/C/D').parts[1:]
>>> -p.parts
('A', 'B', 'C', 'D')
您可以使用os.path.pardir
作为对父目录的引用(本质上是..
(,然后使用os.path.join()
以相对方式向上移动路径,最后os.path.normpath()
规范化您的路径,例如从C:\A\B\C\D\E\F\myfile.py
到到达C:\A\B\C
您可以执行以下操作:
current_file = "C:\A\B\C\D\E\F\myfile.py" # or __file__ if running from myfile.py
path = os.path.dirname(current_file) # get the file's directory
c_dir = os.path.normpath(os.path.join(path, os.path.pardir, os.path.pardir, os.path.pardir))
# C:ABC
在 Python 3.4+ 上,您还可以使用pathlib
使这些平凡的路径操作更容易忍受。