Python os.listdir()方法
很可能我们在生活中遇到过很多次这样的情况,我们想知道一个目录(文件夹)中有多少个文件以及这些文件是什么。或者,有时我们需要查找一个文件,我们知道它的名字,但是我们不知道它在哪个文件夹中。在这种情况下,我们唯一剩下的选择是在目标目录中寻找该文件。
现在,对于我们许多人来说,这似乎很容易:我们只需进入该目录并在那里查找即可。这是一个可能的选择,但是这个选项仅在该目录中只有较少的文件时才有效。只有这样我们才能手动访问该目录并查找其中的文件。但是,如果在目标目录中存在大量文件,比如成千上万个文件,那么这个选项就行不通了。在那种情况下,使用这个选项会花费很长时间(甚至多天)来搜索特定文件是否在目标目录中存在。看起来好像我们如果要找到一个在具有成千上万文件的目录中的文件,我们应该做些什么。
我们可以通过文件资源管理器搜索文件名称,但是如果我们这样做,也将花费很长时间,虽然不像前一个选项那样,但是确实需要很长时间。这是因为文件资源管理器将扫描目录中的每个文件,并且我们必须等待直到磁盘扫描完成。
但是如果我们说我们已经提供了目标目录或路径中所有文件的名称。那么,对于我们来说,检查指定的文件是否存在于目标路径中将会变得非常容易,还会显示我们需要在目标目录中获取所有文件的名称。
如果我们以文本形式获得了一个目录中所有文件的名称列表,我们只需在搜索栏中输入特定文件的名称。然后,只需一秒钟就能找出该文件是否存在于名称列表中。因此,我们可以了解到,拥有一个可以打印出目录或路径中所有文件名称列表的方法有多么重要。
Python为我们提供了这样的方法,我们可以打印出名称列表,其中一个方法就是“os”模块的listdir()函数。我们将在本教程中学习这个listdir()方法,并在Python程序中使用它来打印出指定路径中所有文件的名称列表。
Python中的os.listdir()方法
listdir()函数是由os模块提供的函数,通过使用这个函数,我们可以打印出指定路径中所有文件的名称列表。如果我们想打印出当前工作目录中的文件列表(程序所在的位置),也可以使用listdir()方法。我们可以在需要获取指定目录中所有文件的名称时使用listdir()方法。
os.listdir()函数的语法:
下面是使用os模块的listdir()函数的语法:
>> os.listdir(pathSpecified)
参数:
从上面给定的语法中可以看出,我们只在listdir()方法中给定了一个参数。listdir()函数接受以下路径参数:
- pathSpecified: 在这里,pathSpecified变量表示我们想要知道所有文件名的目标目录的路径。这是listdir()函数中的可选参数,如果我们不在函数内指定路径,它将会打印出当前工作目录中的所有文件名。
返回类型:
listdir()函数的返回类型是’list’,因为它返回指定目录中所有文件的名称列表。
os.listdir()方法:实现
为了理解listdir()函数的工作原理和实现,我们将在一个示例程序中使用它并打印出文件名列表。我们将把listdir()函数的实现部分分为以下两部分:
- 从当前工作目录打印文件名
- 从指定路径打印文件名
我们将为每个类别使用一个示例程序,并获取每种方法中的文件名。
方法1:从当前工作目录打印文件名
在这种方法中,我们将使用os模块的另一个函数getcwd()函数从当前工作目录打印文件名列表。请看以下示例程序以了解该方法的实现:
示例1:
请查看以下使用了带路径参数的os.listdir()方法的Python程序:
# Import os module
import os
# Use getcwd() function
pathSpecified = os.getcwd()
# Using listdir() function
listOfFileNames = os.listdir(pathSpecified)
# Print the name of all files in the current working directory
print("Following is the list of names of all the files present in the current working directory: ")
print(listOfFileNames)
输出:
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()方法:
# Import os module
import os
# Using listdir() function
listOfFileNames = os.listdir()
# Print the name of all files in the current working directory
print("Following is the list of names of all the files present in the current working directory: ")
print(listOfFileNames)
输出:
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程序,我们在path参数中使用了os.listdir()方法:
# Import os module
import os
# Define the specified path
pathSpecified = " C:\Users\Manish\Downloads"
# Using listdir() function
listOfFileNames = os.listdir(pathSpecified)
# Print the name of all files in directory
print("Following is the list of names of all the files present in the specified directory: ")
print(listOfFileNames)
输出:
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()方法中使用了初始化的路径变量,将路径作为函数的参数。最后,在打印语句中使用了另一个初始化的变量(listOfFileNames)来打印输出。
总结
我们在本教程中学习了os模块的listdir()方法,并了解了该函数的重要性。我们学习了该函数的语法,然后学习了使用该函数的方法。最后,我们使用带有listdir()函数的Python程序来理解每个方法的实现。