如何将“..”放入我们放入 os.listdir 参数的路径中?
How can I put '..' in the paths that we put in the os.listdir parameter?
我使用 os.listdir
函数来(如您想象的那样)列出文件夹中的文件夹和文件。正如文档所说,"It does not include the special entries '.' and '..' even if they are present in the directory.".
我对此有疑问,因为我的代码打算在 GitHub 上发布,我不希望每个人都看到我的整个路径,此外,因为他们没有相同的路径,该代码对他们不起作用。
所以我想知道如何解决这个问题。
谢谢!
PS:我的文件夹如下所示:folder。 python 代码在 py
文件夹中,我要访问的文件夹和文件在 Dico
文件夹中。
如果您在 py
文件夹中,并且想要列出 Dico
中的文件,该文件夹与 py
相邻,请使用以下命令:
os.listdir('../Dico')
您误解了文档。文档说特殊条目 '.'
和 '..'
不会出现在 os.listdir
的 输出 中。
文档并未说明如果 os.listdir
的 参数 包含 ..
会发生任何特殊或不寻常的事情。您不需要使用绝对路径或任何其他解决方法。如果你想要一个与工作目录相邻的名为 Dico
的目录的内容列表,你可以只使用
os.listdir('../Dico')
您可以创建相对于模块的路径:
import os
path = os.path.join(os.path.split(__file__)[0], '..', 'Dico')
os.listdir(path)
如果您正在为 Python 3.7+ 准备一个包,您还可以使用 importlib.resources
:
import importlib
importlib.resources.contents('package.Dico')
我假设您的文件结构如下所示。
folder---
py---
dico---
而且我还假设您已经尝试 os.listdir("../dico")
并得到了类似于此 FileNotFoundError: [Errno 2] No such file or directory:
的错误
但是让我向你保证代码是正确的。错误的原因可能如下。
如果您是 运行 来自 IDE 的代码,请检查终端路径。
它将是 /yoursystempath/folder/
而不是 /yoursystempath/folder/py
。这是一个常见的错误,因为大多数 IDEs 在项目文件夹级别启动 python 解释器。不在脚本级别。
处理 python 中路径的最佳方法是在 py 文件夹下的脚本文件之一中创建一个 rootdir
变量,并在需要的地方导入它。
from os import listdir, path
# this return the abspath to the current folder irrespective of where interpreter starts
curdir = path.abspath(path.join(path.abspath(__file__), path.pardir))
# this will return the rootdir path assuming its one level up.
#in your case it will return abs path for folder
rootdir = path.abspath(path.join(curdir, path.pardir))
#now use rootdir to reference any file in your file structure
#to get to dico use the following
dicoPath = path.abspath(path.join(rootdir,"dico"))
#now use listdir with varible dicoPath
listdir(dicoPath)
现在,如果您想在 py 文件夹下的不同脚本中使用 rootdir 变量,请使用以下命令。
from yourFileWhichHasTherootdir import rootdir
我使用 os.listdir
函数来(如您想象的那样)列出文件夹中的文件夹和文件。正如文档所说,"It does not include the special entries '.' and '..' even if they are present in the directory.".
我对此有疑问,因为我的代码打算在 GitHub 上发布,我不希望每个人都看到我的整个路径,此外,因为他们没有相同的路径,该代码对他们不起作用。
所以我想知道如何解决这个问题。
谢谢!
PS:我的文件夹如下所示:folder。 python 代码在 py
文件夹中,我要访问的文件夹和文件在 Dico
文件夹中。
如果您在 py
文件夹中,并且想要列出 Dico
中的文件,该文件夹与 py
相邻,请使用以下命令:
os.listdir('../Dico')
您误解了文档。文档说特殊条目 '.'
和 '..'
不会出现在 os.listdir
的 输出 中。
文档并未说明如果 os.listdir
的 参数 包含 ..
会发生任何特殊或不寻常的事情。您不需要使用绝对路径或任何其他解决方法。如果你想要一个与工作目录相邻的名为 Dico
的目录的内容列表,你可以只使用
os.listdir('../Dico')
您可以创建相对于模块的路径:
import os
path = os.path.join(os.path.split(__file__)[0], '..', 'Dico')
os.listdir(path)
如果您正在为 Python 3.7+ 准备一个包,您还可以使用 importlib.resources
:
import importlib
importlib.resources.contents('package.Dico')
我假设您的文件结构如下所示。
folder---
py---
dico---
而且我还假设您已经尝试 os.listdir("../dico")
并得到了类似于此 FileNotFoundError: [Errno 2] No such file or directory:
的错误
但是让我向你保证代码是正确的。错误的原因可能如下。
如果您是 运行 来自 IDE 的代码,请检查终端路径。
它将是 /yoursystempath/folder/
而不是 /yoursystempath/folder/py
。这是一个常见的错误,因为大多数 IDEs 在项目文件夹级别启动 python 解释器。不在脚本级别。
处理 python 中路径的最佳方法是在 py 文件夹下的脚本文件之一中创建一个 rootdir
变量,并在需要的地方导入它。
from os import listdir, path
# this return the abspath to the current folder irrespective of where interpreter starts
curdir = path.abspath(path.join(path.abspath(__file__), path.pardir))
# this will return the rootdir path assuming its one level up.
#in your case it will return abs path for folder
rootdir = path.abspath(path.join(curdir, path.pardir))
#now use rootdir to reference any file in your file structure
#to get to dico use the following
dicoPath = path.abspath(path.join(rootdir,"dico"))
#now use listdir with varible dicoPath
listdir(dicoPath)
现在,如果您想在 py 文件夹下的不同脚本中使用 rootdir 变量,请使用以下命令。
from yourFileWhichHasTherootdir import rootdir