Python os.listdir() 方法

2024年8月29日 | 阅读 7 分钟

在我们的生活中,我们很有可能遇到过很多次这样的情况:我们想知道一个目录(文件夹)中有多少文件以及这些文件是什么。或者,有时我们需要查找一个文件,我们知道它的名字,但我们不知道它在哪个文件夹里。在这种情况下,我们唯一能做的就是去目标目录中查找。

现在,对我们中的许多人来说,这似乎很容易想到:我们只需要进入目录并在那里查看。这是一个可行的选择,但只有当目录中文件数量很少时,这个选项才有效。只有这样,我们才能手动访问该目录并查找其中的文件。但是,如果目标目录中有大量文件,比如说成千上万的文件,那该怎么办?在这种情况下,这个选项将不起作用,因为要搜索一个有成千上万个文件的目标目录中是否存在特定文件,将花费很长时间(甚至可能需要几天)。如果我们必须在一个有成千上万个文件的目录中按名称查找一个文件,我们该怎么办?

我们可以通过文件浏览器进行搜索,但如果我们这样做,同样也会花费很多时间,虽然不像上一个选项那样,但确实需要很长时间。这是因为文件浏览器会扫描目录中的每一个文件,并且我们需要等待很长时间,直到磁盘扫描完成。

但是,如果我们说我们已经提供了目标目录或路径中所有文件的名称列表呢?那样的话,我们就可以很容易地检查指定的那个文件是否存在于目标路径中,而且它还显示了我们需要在哪里获取目标目录中所有文件的名称。

如果我们以文本形式获得一个目录中所有文件名称的列表,我们只需要在搜索栏中输入那个特定文件的名称。然后,查找文件是否存在于名称列表中将 hardly 花费一秒钟。因此,我们可以理解,拥有一个可以打印目录或路径中所有文件名的方法是多么重要。

Python 为我们提供了这样的方法,可以打印名称列表,其中一种方法是 'os' 模块的 listdir() 函数。在本教程中,我们将学习这个 listdir() 方法,并在 Python 程序中使用它来打印指定路径中所有文件名列表。

Python 中的 os.listdir() 方法

listdir() 函数是由 os 模块提供的一个函数,通过使用这个函数,我们可以打印指定路径中所有文件名列表。如果我们想打印当前工作目录(程序所在位置)中的文件列表,也可以使用 listdir() 方法。每当我们被要求获取指定目录中所有文件名时,我们都可以使用 listdir() 方法。

os.listdir() 函数的语法

以下是从 os 模块使用 listdir() 函数的语法

参数

正如我们在上面的语法中看到的,我们在 listdir() 方法中只提供了一个参数。listdir() 函数接受以下路径参数:

  • pathSpecified:在这里,pathSpecified 变量代表目标目录的路径,我们希望从中获取所有文件的名称。这是 listdir() 函数中的一个可选参数,如果我们不在函数中提供指定的路径,它将打印当前工作目录中的所有文件名。

返回类型

listdir() 函数的返回类型是“list”,因为它返回指定目录中所有文件名列表。

os.listdir() 方法:实现

为了理解 listdir() 函数的工作原理和实现,我们将它用于一个示例程序中,并从中打印文件名列表。我们将 listdir() 函数的实现部分分为以下两个部分:

  1. 打印当前工作目录中的文件名
  2. 打印指定路径中的文件名

我们将为每个类别使用一个示例程序,并在每种方法中获取文件名。

方法 1:打印当前工作目录中的文件名

在此方法中,我们将使用 os 模块的另一个函数,即 getcwd() 函数,来打印当前工作目录中的文件名列表。请看下面的示例程序,以了解此方法的实现。

示例 1

请看下面的 Python 程序,我们在其中使用了带有路径参数的 os.listdir() 方法。

输出

Following is the list of names of all the files present in the current working directory: 
['.ipynb_checkpoints', '1510981730952-33afef2b-eb41-4592-8d3f-bd3e19932d36_.pdf', '1510981730952-33afef2b-eb41-4592-8d3f-bd3e19932d36__19.jpg', '1527589430558.jpg', '1605467180870.png', '1605467180879.png', '160591-fruit-template-16x9.pptx', '1613034967066.jpg', '1613034967083.jpg', '1613035079325.jpg', '1613035270313.jpg', '1616159417742.jpg', '1616159417758.jpg', ???., Windows11InstallationAssistant.exe', 'WindowsPCHealthCheckSetup.msi', 'Word frequency Python.edited.docx', 'wrong.jpg', 'X-ray image.png', 'XML-data.xml', 'yemen500.png', 'zambia-500.png', 'zimbabwe-500.png', 'ZoomInstaller (1).exe', 'ZoomInstaller.exe', '__pycache__', '~$EOC CERTIFICATE.pptx']

正如我们所见,程序输出中打印了我们当前工作目录中所有文件的名称。

说明

在程序中导入 os 模块后,我们使用 getcwd() 函数来获取当前工作目录的路径。我们用 'pathSpecified' 这个名字初始化了一个变量,并将当前工作目录的路径存储在这个变量中。之后,我们在另一个初始化的变量,即 listOfFileNames 中,使用了 listdir() 函数来存储该变量中所有文件的名称。我们将当前工作路径的初始变量作为参数传递给 listdir() 函数,最后,我们使用 print 语句在输出中打印所有名称的列表。

如果我们不想在程序中使用任何其他函数,我们也可以获取程序所在目录中的所有文件名。我们只需要在 listdir() 函数中省略任何目录路径作为参数,然后在程序执行时,将以输出中的列表形式返回当前目录中所有名称。请看下面的示例程序,以了解此方法的实现。

示例 2

请看下面的 Python 程序,我们在其中使用了不带任何参数的 os.listdir() 方法。

输出

Following is the list of names of all the files present in the current working directory: 
['.ipynb_checkpoints', '1510981730952-33afef2b-eb41-4592-8d3f-bd3e19932d36_.pdf', '1510981730952-33afef2b-eb41-4592-8d3f-bd3e19932d36__19.jpg', '1527589430558.jpg', '1605467180870.png', '1605467180879.png', '160591-fruit-template-16x9.pptx', '1613034967066.jpg', '1613034967083.jpg', '1613035079325.jpg', '1613035270313.jpg', '1616159417742.jpg', '1616159417758.jpg', ???., Windows11InstallationAssistant.exe', 'WindowsPCHealthCheckSetup.msi', 'Word frequency Python.edited.docx', 'wrong.jpg', 'X-ray image.png', 'XML-data.xml', 'yemen500.png', 'zambia-500.png', 'zimbabwe-500.png', 'ZoomInstaller (1).exe', 'ZoomInstaller.exe', '__pycache__', '~$EOC CERTIFICATE.pptx']

正如我们所见,程序执行后,输出中打印了 Python 安装所在当前文件中所有文件名的列表。

说明

在此程序中,我们省略了路径参数,仍然获得了当前工作目录中所有文件名的列表。如果我们想获取当前工作目录中所有文件的名称列表,我们更倾向于使用这种方法。因为在这种方法中,我们不必使用任何参数或定义任何路径变量,从而节省了程序中的额外代码行,并节省了我们的时间。

方法 2:打印指定路径中的文件名

在此方法中,我们可以通过在 listdir() 函数中提供目录的指定路径来获取指定目录中所有文件名列表。我们可以从文件的属性选项中获取目录的路径,然后就可以在程序中使用相同的路径。请看下面的示例程序,以了解此方法的实现。

示例 3

请看下面的 Python 程序,我们在其中使用了带有路径参数的 os.listdir() 方法。

输出

Following is the list of names of all the files present in the specified directory: 
['.ipynb_checkpoints', '1510981730952-33afef2b-eb41-4592-8d3f-bd3e19932d36_.pdf', '1510981730952-33afef2b-eb41-4592-8d3f-bd3e19932d36__19.jpg', '1527589430558.jpg', '1605467180870.png', '1605467180879.png', '160591-fruit-template-16x9.pptx', '1613034967066.jpg', '1613034967083.jpg', '1613035079325.jpg', '1613035270313.jpg', '1616159417742.jpg', '1616159417758.jpg', ........, Windows11InstallationAssistant.exe', 'WindowsPCHealthCheckSetup.msi', 'Word frequency Python.edited.docx', 'wrong.jpg', 'X-ray image.png', 'XML-data.xml', 'yemen500.png', 'zambia-500.png', 'zimbabwe-500.png', 'ZoomInstaller (1).exe', 'ZoomInstaller.exe', '__pycache__', '~$EOC CERTIFICATE.pptx']

正如我们所见,程序输出中打印了指定目录中所有文件的名称。

说明

在程序中导入 os 模块后,我们首先通过初始化一个路径变量来定义我们想要从中打印所有文件名列表的目录的路径。之后,我们在 listdir() 方法中使用初始化的路径变量,将路径作为函数参数。最后,我们在 print 语句中使用另一个初始化的变量(listOfFileNames)在输出中打印结果。

结论

在本教程中,我们学习了 os 模块的 listdir() 方法,并理解了该函数的重要性。我们学习了该函数的基本语法,然后学习了使用该函数的方法。最后,我们使用带有 listdir() 函数的 Python 程序来理解每种方法的实现。


下一个主题Python 自动化模块