📜  Python - 循环遍历某些扩展名的文件

📅  最后修改于: 2022-05-13 01:54:19.197000             🧑  作者: Mango

Python - 循环遍历某些扩展名的文件

一个目录能够存储多个文件, Python可以支持循环遍历它们的机制。在本文中,我们将看到在给定目录或子目录中迭代某些文件的不同方法。

包含不同文件的路径:这将用于所有方法。

方法 1:使用listdir()

在这个方法中,我们将使用 os 库中的os.listdir()函数。此函数返回目录中存在的文件名列表,没有顺序。



因此,要从特定目录中获取特定类型的文件,我们需要遍历目录和子目录并打印具有特定扩展名的文件。

句法:

方法

  • 导入 os 库并在 os.listdir()函数传递目录。
  • 创建一个包含您要获取的扩展名的元组。
  • 通过循环遍历目录中的所有文件并打印具有特定扩展名的文件。
  • Endswith()函数检查文件是否以特定扩展名结尾,然后打印文件名。

例子:

Python3
# importing the library
import os
  
# giving directory name
dirname = 'D:\\AllData'
  
# giving file extension
ext = ('.exe', 'jpg')
  
# iterating over all files
for files in os.listdir(dirname):
    if files.endswith(ext):
        print(files)  # printing file name of desired extension
    else:
        continue


Python3
# importing the module
import os
  
# directory name
dirname = 'D:\\AllData'
  
# extensions
ext = ('.exe', 'jpg')
  
# scanning the directory to get required files
for files in os.scandir(dirname):
    if files.path.endswith(ext):
        print(files)  # printing file name


Python3
# importing the module
import os
  
# giving directory name
folderdir = 'D:\\AllData'
  
# giving file extensions
ext = ('.pdf', '.mkv')
  
# iterating over directory and subdirectory to get desired result
for path, dirc, files in os.walk(folderdir):
    for name in files:
        if name.endswith(ext):
            print(name)  # printing file name


Python3
# importing the module
import glob
  
# accesing and printing files in directory and subdirectory
for filename in glob.glob('D:\\AllData\\**\\*.exe', recursive=True):
    print(filename)  # print file name


Python3
# importing the module
from pathlib import Path
  
# directory name
dirname = 'D:\\AllData'
  
# giving directory name to Path() function
paths = Path(dirname).glob('**/*.exe',)
  
# iterating over all files
for path in paths:
    print(path)  # printing file name


输出:



方法 2:使用scandir()

此方法使用os.scandir()函数返回一个用于访问文件的迭代器。条目以任意顺序产生。它列出了该目录下的目录或文件。

句法:

例子:

蟒蛇3

# importing the module
import os
  
# directory name
dirname = 'D:\\AllData'
  
# extensions
ext = ('.exe', 'jpg')
  
# scanning the directory to get required files
for files in os.scandir(dirname):
    if files.path.endswith(ext):
        print(files)  # printing file name

输出:

方法 3:使用walk()

在这个方法中,我们将使用os.walk()函数,它产生三个元组,即:-(dirpath, dirnames, filenames)。因为,这是一个递归过程,它将遍历子目录中的所有后代文件并打印文件名。进一步的方法与上述方法相同。



句法:

例子:

蟒蛇3

# importing the module
import os
  
# giving directory name
folderdir = 'D:\\AllData'
  
# giving file extensions
ext = ('.pdf', '.mkv')
  
# iterating over directory and subdirectory to get desired result
for path, dirc, files in os.walk(folderdir):
    for name in files:
        if name.endswith(ext):
            print(name)  # printing file name

输出:

方法 4:使用glob

在这个方法中,我们将使用 glob 库下的 glob.iglob()函数。 Glob 是一个通用术语,用于定义根据与 Unix shell 相关的规则匹配指定模式的技术。 Linux 和 Unix 系统和 shell 也支持 glob 并在系统库中提供函数glob()。

在Python, glob 模块用于检索与指定模式匹配的文件/路径名。 glob函数接受目录/路径,并且 \\**\\ 模式告诉在子文件夹中查找具有特定扩展名的文件,这些文件也需要递归处理,因此应该将递归设置为 True。

例子:



蟒蛇3

# importing the module
import glob
  
# accesing and printing files in directory and subdirectory
for filename in glob.glob('D:\\AllData\\**\\*.exe', recursive=True):
    print(filename)  # print file name

输出:

方法 5:使用 path()

此方法使用pathlib模块中的Path()函数。 path函数接受目录名作为参数,在 glob函数, '**/*' 模式用于查找特定扩展名的文件。它也是递归函数并列出同一目录和子目录的所有文件。

句法:

例子:

蟒蛇3

# importing the module
from pathlib import Path
  
# directory name
dirname = 'D:\\AllData'
  
# giving directory name to Path() function
paths = Path(dirname).glob('**/*.exe',)
  
# iterating over all files
for path in paths:
    print(path)  # printing file name

输出: