Python - 循环遍历某些扩展名的文件
一个目录能够存储多个文件, Python可以支持循环遍历它们的机制。在本文中,我们将看到在给定目录或子目录中迭代某些文件的不同方法。
包含不同文件的路径:这将用于所有方法。
方法 1:使用listdir()
在这个方法中,我们将使用 os 库中的os.listdir()函数。此函数返回目录中存在的文件名列表,没有顺序。
因此,要从特定目录中获取特定类型的文件,我们需要遍历目录和子目录并打印具有特定扩展名的文件。
句法:
listdir(path)
方法
- 导入 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()函数返回一个用于访问文件的迭代器。条目以任意顺序产生。它列出了该目录下的目录或文件。
句法:
scandir(path)
例子:
蟒蛇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)。因为,这是一个递归过程,它将遍历子目录中的所有后代文件并打印文件名。进一步的方法与上述方法相同。
句法:
walk(path)
例子:
蟒蛇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函数, '**/*' 模式用于查找特定扩展名的文件。它也是递归函数并列出同一目录和子目录的所有文件。
句法:
path(path)
例子:
蟒蛇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
输出: