python如何获取一个路径下的所有文件名?

在 Python 中,可以使用 os.listdir()glob.glob() 来获取一个路径下的所有文件名。以下是几种方法:


方法 1:使用 os.listdir()(返回所有文件和目录名)

import os

path = r"D:\Projects\Event_By_Event_MC_py\resources\EBE_MC\MCedLMFiles_LOR_IDX_TBIN_CF"
file_names = os.listdir(path)

print("所有文件和目录名:")
for name in file_names:
    print(name)

输出示例:

file1.txt
file2.bin
subdir1
subdir2
...

缺点:会返回 所有文件和目录,不区分文件和文件夹。


方法 2:使用 os.listdir() + os.path.isfile()(仅获取文件名)

import os

path = r"D:\Projects\Event_By_Event_MC_py\resources\EBE_MC\MCedLMFiles_LOR_IDX_TBIN_CF"
file_names = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]

print("仅文件名:")
for name in file_names:
    print(name)

输出示例:

file1.txt
file2.bin
...

优点:只返回 文件,不包含子目录。


方法 3:使用 glob.glob()(支持通配符匹配)

import glob

path = r"D:\Projects\Event_By_Event_MC_py\resources\EBE_MC\MCedLMFiles_LOR_IDX_TBIN_CF\*"
file_names = glob.glob(path)

print("所有文件和目录(完整路径):")
for name in file_names:
    print(name)

输出示例:

D:\Projects\...\MCedLMFiles_LOR_IDX_TBIN_CF\file1.txt
D:\Projects\...\MCedLMFiles_LOR_IDX_TBIN_CF\file2.bin
...

优点

  • 返回 完整路径
  • 支持通配符,如 *.txt 只匹配 .txt 文件。

示例(仅匹配 .txt 文件):

txt_files = glob.glob(r"D:\Projects\...\MCedLMFiles_LOR_IDX_TBIN_CF\*.txt")

方法 4:使用 os.scandir()(更高效,Python 3.5+)

import os

path = r"D:\Projects\Event_By_Event_MC_py\resources\EBE_MC\MCedLMFiles_LOR_IDX_TBIN_CF"
with os.scandir(path) as entries:
    file_names = [entry.name for entry in entries if entry.is_file()]

print("仅文件名(高效方式):")
for name in file_names:
    print(name)

优点

  • os.listdir() 更高效(直接返回 DirEntry 对象)。
  • 可以检查 entry.is_file()entry.is_dir()

方法 5:递归获取所有子目录下的文件(os.walk()

import os

path = r"D:\Projects\Event_By_Event_MC_py\resources\EBE_MC\MCedLMFiles_LOR_IDX_TBIN_CF"
all_files = []

for root, dirs, files in os.walk(path):
    for file in files:
        all_files.append(os.path.join(root, file))

print("所有文件(包括子目录):")
for file in all_files:
    print(file)

输出示例:

D:\Projects\...\MCedLMFiles_LOR_IDX_TBIN_CF\file1.txt
D:\Projects\...\MCedLMFiles_LOR_IDX_TBIN_CF\subdir1\file2.txt
...

适用场景:需要遍历 所有子目录 下的文件。


总结

方法 适用场景 返回内容 是否递归
os.listdir() 获取当前目录所有条目 仅文件名
os.listdir() + os.path.isfile() 仅获取当前目录的文件 仅文件名
glob.glob() 支持通配符匹配 完整路径
os.scandir() 高效获取文件/目录 DirEntry 对象
os.walk() 递归获取所有子目录文件 完整路径

推荐

  • 如果只需要当前目录的文件,用 os.scandir()(高效)或 glob.glob()(支持通配符)。
  • 如果需要递归所有子目录,用 os.walk()

你可能感兴趣的:(qt,开发语言)