os.DirEntry
是 Python 3.5 引入的标准库 os
中的一个类,它用于描述目录中的一个条目(包括文件和子目录)。这个类拥有以下属性和方法:
name
: 条目的名称path
: 条目的路径(相对路径或绝对路径)is_dir()
: 如果条目是目录,则返回 Trueis_file()
: 如果条目是文件,则返回 Trueis_symlink()
: 如果条目是符号链接,则返回 Truestat()
: 返回一个包含文件状态信息的os.stat_result
对象
其中,path
是一个十分有用的属性,它可以返回当前条目的路径,方便我们进行文件操作。下面我们来看一些使用范例。
遍历目录中的所有文件和子目录
我们可以使用 os.scandir()
读取指定目录中的所有条目,然后对每个条目进行处理。可以通过 os.path.join()
将当前目录与条目名称合成一个完整路径,然后使用 is_file()
和 is_dir()
方法判断条目类型,最后分别对文件和子目录进行处理。代码如下:
import os
def traverse_directory(dir_path):
with os.scandir(dir_path) as entries:
for entry in entries:
if entry.is_file():
print("File: {}".format(entry.path))
elif entry.is_dir():
print("Directory: {}".format(entry.path))
traverse_directory(entry.path)
统计指定目录的文件数量和目录数量
这个任务比较简单,我们只需要使用 os.scandir()
读取指定目录中的所有条目,并分别对文件和子目录进行计数即可。代码如下:
import os
def count_files_and_directories(dir_path):
count_files = 0
count_directories = 0
with os.scandir(dir_path) as entries:
for entry in entries:
if entry.is_file():
count_files += 1
elif entry.is_dir():
count_directories += 1
nested_counts = count_files_and_directories(entry.path)
count_files += nested_counts[0]
count_directories += nested_counts[1]
return (count_files, count_directories)
按照修改时间排序和过滤指定类型的文件
我们可以使用 os.scandir()
读取指定目录中的所有文件和子目录,然后将文件条目加入到一个列表中。针对这个列表可以分别对它进行排序和过滤操作,这里以对文件条目按照修改时间排序和过滤出后缀名是 '.txt'
的文件为例。代码如下:
import os
def sort_and_filter_files(dir_path):
txt_files = []
with os.scandir(dir_path) as entries:
for entry in entries:
if entry.is_file() and entry.name.endswith('.txt'):
txt_files.append(entry)
# 按照修改时间排序
txt_files.sort(key=lambda f: f.stat().st_mtime)
# 输出所有txt文件的路径
for f in txt_files:
print(f.path)
综上,我们可以看到 os.DirEntry
的 path
属性在文件操作中是一个十分有用的属性,它可以返回当前条目的路径。在遍历目录、统计文件和目录数量、对文件排序和过滤等场景中都有重要的应用。