Python 获取目录下文件列表及其大小
在计算机系统中,目录是一种特殊的节点,包含其他嵌套的文件夹、文件等。要列出目录,我们需要Python的特殊库或模块,如os模块、glob模块等。它们还提供了用于访问目录大小的方法。目录的大小是目录在计算机ROM中占用的空间。在本文中,我们将探讨如何获取目录中文件的列表以及它们的大小。
使用OS模块
Python的os模块是一个强大的工具,允许开发者与底层操作系统进行交互。它提供了各种用于执行文件和目录管理任务、处理进程、处理环境变量等的函数。使用os模块,您可以创建、删除和操作文件和目录,执行系统命令,导航文件路径,访问各种与系统相关的信息。它将您的Python代码与底层操作系统连接起来,使您能够构建健壮的、平台无关的应用程序。
示例
我们首先在下面的代码中使用import语句导入了os模块。接下来,我们创建了名为get_file_sizes的函数,该函数接受目录名并打印所有文件的名称及其大小。我们使用“listdir”列出目录中的所有文件和目录。然后,我们遍历列表,并对于每个迭代,我们检查是否为文件,如果是,则使用“getsize”方法打印名称和大小。
import os
def get_file_sizes(directory):
files = os.listdir(directory)
for file in files:
path = os.path.join(directory, file)
if os.path.isfile(path):
size = os.path.getsize(path)
print(f"{file}: {size} bytes")
directory_path = "files"
get_file_sizes(directory_path)
输出
file1.txt: 12 bytes
file2.txt: 26 bytes
file3.txt: 56 bytes
使用Glob和OS模块
Python的glob模块帮助使用通配符模式搜索文件和目录。它允许您定义特定的模式或模板,并将它们与文件或目录名称进行匹配。您可以使用类似”*”,”?”等通配符创建灵活的模式,以找到符合您标准的文件。使用glob模块,您可以轻松检索与指定模式匹配的文件及其相应路径的列表。它提供了一种方便高效的方法,可基于可自定义的模式执行文件搜索和操作。
示例
在以下代码中,我们首先使用Python的导入语句导入了glob和os模块。接下来,我们定义了一个名为get_files_sizes的函数,它以目录路径作为参数。然后,我们使用glob模块的glob方法找到目录中的所有路径。我们遍历列表,如果是文件,我们使用os的”getsize”方法来确定文件的大小。
import glob
import os
def get_file_sizes(directory):
file_paths = glob.glob(os.path.join(directory, "*"))
for path in file_paths:
if os.path.isfile(path):
size = os.path.getsize(path)
file_name = os.path.basename(path)
print(f"{file_name}: {size} bytes")
directory_path = "files"
get_file_sizes(directory_path)
输出
file1.txt: 12 bytes
file2.txt: 26 bytes
file3.txt: 56 bytes
使用Pathlib库的Path模块
Pathlib库是Python中一种强大的以对象为导向的文件系统路径处理工具。它提供了一种用户友好且直观的处理路径、目录和文件的方法。使用pathlib,您可以轻松地创建、操作和导航路径,语法一致且表达能力强。使用此库的优势在于它消除了使用复杂的字符串操作来处理文件名的需要。
示例
以下代码中,我们首先从pathlib库导入Path模块。接下来,我们创建了一个函数,以目录名称作为参数。我们使用Path方法创建了一个对象,使用iterdir方法遍历了目录中的所有目录和文件夹。然后,我们检查列表中的元素是否是一个目录,如果是,我们使用stat().st_size方法确定其大小。
from pathlib import Path
def get_file_sizes(directory):
path = Path(directory)
files = path.iterdir()
for file in files:
if file.is_file():
size = file.stat().st_size
print(f"{file.name}: {size} bytes")
directory_path = "files"
get_file_sizes(directory_path)
输出
file1.txt: 12 bytes
file2.txt: 26 bytes
file3.txt: 56 bytes
使用OS模块的Stat方法
os模块提供了另一种方法来确定文件大小 – stat方法。该方法可以检索有关文件和目录的各种信息。它返回一个包含各种属性和指定路径的元组对象,例如文件大小、权限、时间戳等。
示例
在以下代码中,我们首先导入了os模块。接下来,在内置函数下,我们使用了scandir方法列出所有的文件和目录。我们遍历了文件,并且对于每个条目,我们检查它是否是一个文件。如果是文件,我们使用”stat”方法和st_size属性来确定文件的大小。
import os
def get_file_sizes(directory):
with os.scandir(directory) as entries:
for entry in entries:
if entry.is_file():
size = entry.stat().st_size
print(f"{entry.name}: {size} bytes")
directory_path = "files"
get_file_sizes(directory_path)
输出
file1.txt: 12 bytes
file2.txt: 26 bytes
file3.txt: 56 bytes
结论
在本文中,我们了解了如何使用Python的不同库列出目录中的文件及其大小。Python是一种通用的脚本语言,提供了各种方法来列出文件。这包括glob、os、pathlib等。它们是跨平台的代码,使得编程人员可以在多个应用程序中使用相同的代码。