Python中列出目录下所有文件的方法

Python中列出目录下所有文件的方法

技术背景

在Python编程中,经常需要列出目录下的所有文件,这在文件管理、数据处理等场景中非常常见。Python提供了多种方法来实现这一功能,不同的方法适用于不同的场景。

实现步骤

1. 使用os.listdir()

1
2
3
4
5
from os import listdir
from os.path import isfile, join
mypath = '.' # 当前目录
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]
print(onlyfiles)

2. 使用os.walk()

1
2
3
4
5
6
7
from os import walk
mypath = '.'
f = []
for (dirpath, dirnames, filenames) in walk(mypath):
f.extend(filenames)
break
print(f)

3. 使用glob模块

1
2
import glob
print(glob.glob("/home/adam/*"))

4. 使用pathlib模块

1
2
3
import pathlib
flist = [p for p in pathlib.Path('.').iterdir() if p.is_file()]
print(flist)

5. 使用os.scandir()

1
2
3
import os
x = [f.name for f in os.scandir() if f.is_file()]
print(x)

核心代码

以下是一个完整的示例,展示了如何使用os.walk()递归地列出目录下的所有文件:

1
2
3
4
5
6
7
8
9
10
11
12
import os

def get_filepaths(directory):
file_paths = []
for root, directories, files in os.walk(directory):
for filename in files:
filepath = os.path.join(root, filename)
file_paths.append(filepath)
return file_paths

full_file_paths = get_filepaths("/Users/johnny/Desktop/TEST")
print(full_file_paths)

最佳实践

  • 性能考虑:在处理大量文件时,os.scandir()pathlib模块的性能通常优于os.listdir(),因为它们可以减少系统调用次数。
  • 跨平台兼容性:使用os.path.join()pathlib模块可以确保代码在不同操作系统上的兼容性。
  • 过滤文件:结合fnmatch模块或正则表达式可以实现更复杂的文件过滤。

常见问题

  • os.listdir()包含目录os.listdir()会返回目录下的所有文件和目录,如果只需要文件,可以结合os.path.isfile()进行过滤。
  • 递归问题:使用os.walk()可以递归地列出目录下的所有文件,但要注意递归深度可能会导致栈溢出。
  • 文件路径问题:在处理文件路径时,要注意不同操作系统的路径分隔符不同,可以使用os.path.join()pathlib模块来避免这个问题。

Python中列出目录下所有文件的方法
https://119291.xyz/posts/2025-04-21.python-list-files-in-directory/
作者
ww
发布于
2025年4月22日
许可协议