Python遍历文件夹
概述
在编程过程中,我们经常需要处理文件和文件夹。而对于文件夹的操作,如何快速、有效地遍历文件夹中的文件,是一个常见的需求。Python提供了多种方法来遍历文件夹,方便进行文件操作。
在本文中,我们将介绍Python中常用的三种方法来遍历文件夹,分别是使用os
模块、使用os.walk()
函数和使用glob
模块。同时,我们还会讲解如何对文件进行筛选和过滤,以及如何获取文件的属性信息。
为了更好地说明这些方法,我们将结合实际的示例来演示它们的用法。
使用os模块遍历文件夹
Python的os
模块提供了一系列操作文件和目录的函数。其中,os.listdir(path)
函数用于获取指定路径下的所有文件和文件夹的名称列表。
以下是一个示例代码,演示了如何使用os.listdir()
函数遍历文件夹中的文件:
import os
# 指定文件夹路径
folder_path = 'C:/users'
# 遍历文件夹
for file_name in os.listdir(folder_path):
# 拼接文件的完整路径
file_path = os.path.join(folder_path, file_name)
if os.path.isfile(file_path):
print("文件:", file_path)
elif os.path.isdir(file_path):
print("文件夹:", file_path)
上述示例代码中,我们首先指定了一个文件夹路径folder_path
,然后使用os.listdir()
来获取该文件夹下的所有文件和文件夹。接着,我们使用os.path.join()
函数拼接文件的完整路径,并使用os.path.isfile()
和os.path.isdir()
函数判断文件类型并打印相应的信息。
运行上述代码,可以得到以下输出:
文件夹: C:/users/Administrator
文件夹: C:/users/Public
文件夹: C:/users/Guest
文件: C:/users/desktop.ini
文件夹: C:/users/All Users
...
这样,我们就成功地遍历了文件夹C:/users
中的所有文件和文件夹。
使用os.walk()函数遍历文件夹
除了os.listdir()
函数外,Python的os
模块还提供了一个更为方便的函数os.walk()
用于遍历文件夹中的所有文件和子文件夹。
以下是一个示例代码,演示了如何使用os.walk()
函数遍历文件夹中的文件:
import os
# 指定文件夹路径
folder_path = 'C:/users'
# 遍历文件夹
for root, dirs, files in os.walk(folder_path):
for file_name in files:
file_path = os.path.join(root, file_name)
print("文件:", file_path)
for dir_name in dirs:
dir_path = os.path.join(root, dir_name)
print("文件夹:", dir_path)
上述示例代码中,我们使用os.walk()
函数来遍历文件夹C:/users
中的所有文件和子文件夹。函数的返回值是一个三元组(root, dirs, files)
,其中root
表示正在遍历的文件夹路径,dirs
表示当前文件夹中的子文件夹列表,files
表示当前文件夹中的文件列表。
注意,在遍历文件夹时,os.walk()
函数是以深度优先的方式进行遍历。
运行上述代码,可以得到与前述方法相同的输出。
使用glob模块遍历文件夹
另外一个常用的遍历文件夹的方法是使用glob
模块。glob
模块提供了基于通配符的文件搜索函数,可以方便地筛选和匹配文件。
以下是一个示例代码,演示了如何使用glob
模块遍历文件夹中的文件:
import glob
# 指定文件夹路径
folder_path = 'C:/users'
# 遍历文件夹
for file_path in glob.glob(folder_path + '/**', recursive=True):
if glob.os.path.isfile(file_path):
print("文件:", file_path)
elif glob.os.path.isdir(file_path):
print("文件夹:", file_path)
上述示例代码中,我们使用glob.glob()
函数来获取文件夹C:/users
中的所有文件和文件夹。通过设置recursive=True
参数,可以递归地遍历文件夹下的所有子文件夹。
同样地,我们使用os.path.isfile()
和os.path.isdir()
函数判断文件类型并打印相应的信息。
使用glob
模块遍历文件夹与使用os.listdir()
函数类似,不同之处在于glob.glob()
使用了通配符的方式来匹配文件。例如,上述代码中的'C:/users/**'
表示匹配文件夹C:/users
及其所有的子文件夹。
文件筛选和过滤
在实际的应用中,我们经常需要根据一定的条件对文件进行筛选和过滤。下面将演示如何使用以上三种方法对文件进行筛选。
以仅遍历某些特定文件类型的文件为例,我们可以根据文件扩展名来进行筛选。
以下是一个示例代码,演示了如何仅遍历某些特定文件类型的文件:
import os
# 指定文件夹路径
folder_path = 'C:/users'
# 遍历文件夹
for file_name in os.listdir(folder_path):
file_path = os.path.join(folder_path, file_name)
if os.path.isfile(file_path) and file_name.endswith('.txt'):
print("文件:", file_path)
上述示例代码中,我们使用file_name.endswith('.txt')
来筛选以.txt
为扩展名的文件。
同样地,我们可以在os.walk()
和glob.glob()
中添加条件语句,以实现对文件的筛选。
获取文件属性信息
除了遍历文件夹中的文件,有时候我们还需要获取文件的一些属性信息,如文件大小、创建时间等。
以下是一个示例代码,演示了如何获取文件的属性信息:
import os
import time
# 指定文件夹路径
folder_path = 'C:/users'
# 遍历文件夹
for file_name in os.listdir(folder_path):
file_path = os.path.join(folder_path, file_name)
if os.path.isfile(file_path):
file_size = os.path.getsize(file_path)
file_ctime = os.path.getctime(file_path)
file_mtime = os.path.getmtime(file_path)
print("文件:", file_path)
print("大小:", file_size, "bytes")
print("创建时间:", time.ctime(file_ctime))
print("修改时间:", time.ctime(file_mtime))
上述示例代码中,我们使用os.path.getsize()
函数获取文件的大小,使用os.path.getctime()
函数获取文件的创建时间,使用os.path.getmtime()
函数获取文件的修改时间。
同时,我们使用time.ctime()
函数将时间戳转换为可读的时间格式。
运行上述代码,可以得到以下输出:
文件: C:/users/desktop.ini
大小: 282 bytes
创建时间: Fri Jun 12 15:42:30 2020
修改时间: Thu Jan 10 19:22:34 2019
...
通过以上代码,我们成功地获取了文件的大小、创建时间和修改时间等属性信息。
总结
本文详细介绍了在Python中遍历文件夹的三种常用方法:使用os.listdir()
函数、使用os.walk()
函数和使用glob
模块。同时,我们还讲解了如何对文件进行筛选和过滤,以及如何获取文件的属性信息。
通过这些方法,我们可以快速有效地遍历文件夹中的文件,方便进行文件操作和数据处理。
在实际应用中,根据具体需求选择合适的方法进行文件遍历,并根据需要进行文件筛选、属性获取等操作,从而更好地完成文件处理任务。