很有可能我们在生活中遇到过很多这样的情况,我们想知道一个目录(文件夹)中有多少文件,有哪些文件。或者,有时我们必须寻找一个文件,我们知道它的名称,但不知道它在哪个文件夹中。在这种情况下,留给我们的唯一选择是在目标目录中查找文件。
现在,对我们许多人来说,思考似乎很容易;我们只要去目录里找找就行了。这是一个可能的选项,但是这个选项只有在该目录中只有少量文件时才有效。只有这样,我们才能手动访问该目录并查找那里存在的文件。但是,在目标目录中存在大量文件的情况下,假设有数千个文件。在这种情况下,该选项将不起作用,因为要花很长时间(甚至很多天)来搜索目标目录中是否存在一个特定的文件,而目标目录中有成千上万个文件。如果我们必须在有成千上万个文件的目录中找到一个同名文件,这似乎是我们应该做的。
我们可以通过文件资源管理器搜索名称,但是如果我们这样做,也将花费大量时间,不像前面的选项那样,但是是的,需要大量时间。这是因为文件资源管理器将扫描目录中的每个文件,我们必须等待很长时间,直到完成对磁盘的扫描。
但是,如果我们说我们已经提供了目标目录或路径中存在的所有文件的名称,会怎么样呢?然后,我们将很容易检查指定的文件是否存在于目标路径中,它还显示了我们需要从哪里获取目标目录中所有文件的名称。
如果给我们一个文本形式的目录中所有文件的名称列表,我们只需要在搜索栏中键入特定文件的名称。然后,几乎不需要一秒钟就能发现文件是否在名字列表中。因此,我们可以理解,拥有一个可以打印目录或路径中所有文件名称列表的方法是多么重要。
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 ”,因为它返回指定目录中所有文件的名称列表。
方法:实现:
为了理解 listdir()函数的工作和实现,我们将在一个示例程序中使用它,并从中打印文件名列表。我们将 listdir()函数的实现部分分为以下两部分:
- 从当前工作目录打印文件名
- 从指定路径打印文件名
我们将为每个类别使用一个示例程序,并获取每个方法中的文件名。
方法 1:从当前工作目录打印文件名:
在这种方法中,我们将使用 os 模块的另一个函数,即 getcwd()函数打印当前工作目录中的文件名列表。看下面的示例程序来理解这个方法的实现:
例 1:
看看下面的 Python 程序,其中我们使用了带有路径参数的 os.listdir()
方法:
# 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()函数来获取当前工作目录的路径。我们已经初始化了一个名为“路径指定”的变量,并将当前工作目录的路径存储在这个变量中。之后,我们在另一个初始化的变量,即 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 的当前文件中所有文件的名称列表。
说明:
在这个程序中,我们省略了 path 参数,仍然获得当前工作目录中所有文件的名称列表。如果我们想从当前工作目录中获得所有文件的名称列表,我们会更喜欢使用这个方法。因为在这个方法中,我们不需要使用任何参数或定义任何路径变量,因此它节省了我们程序中任何额外的代码行,并节省了我们的时间。
方法 2:从指定路径打印文件名:
在这个方法中,我们可以通过在 listdir()函数中提供目录的指定路径来获得指定目录中所有文件的名称列表。我们可以从文件的属性选项中获得目录的路径,然后我们可以在程序中使用相同的文件。看下面的示例程序来理解这个方法的实现:
例 3:
看看下面的 Python 程序,其中我们使用了带有路径参数的 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()方法中使用初始化的路径变量,在函数中使用路径作为参数。最后,我们在 print 语句中使用了另一个初始化变量(listOfFileNames)来打印输出中的结果。
结论
在本教程中,我们学习了 os 模块的 listdir()方法,并理解了该函数的重要性。我们学习这个函数的语法,然后学习使用这个函数的方法。最后,我们使用带有 listdir()函数的 Python 程序来理解每个方法的实现。