|
|
1. os.listdir () 最简单(只返回名称,不含完整路径)
- import os
- folder_path = r"D:\test" # 目标文件夹路径
- # 获取文件夹内所有文件+文件夹名称列表
- all_names = os.listdir(folder_path)
- print(all_names)
复制代码
2. os.scandir () 效率更高(推荐遍历大量文件)
- import os
- path = r"D:\test"
- file_list = []
- with os.scandir(path) as entries:
- for entry in entries:
- # entry.name:文件名;entry.path:完整路径
- file_list.append(entry.name)
- print(file_list)
复制代码
3. glob 通配符筛选,可只拿文件、排除文件夹
全部内容(文件 + 子文件夹)
- from glob import glob
- files = glob(r"D:\test\*") # 带完整路径
- # 只想纯文件名:[os.path.basename(i) for i in files]
- print(files)
复制代码
只获取指定后缀文件(比如所有 txt)
- txt_files = glob(r"D:\test\*.txt")
复制代码
4. pathlib
- from pathlib import Path
- p = Path(r"D:\test")
- # 所有条目名称
- all_files = [f.name for f in p.iterdir()]
- print(all_files)
- # 只筛选文件(排除文件夹)
- only_files = [f.name for f in p.iterdir() if f.is_file()]
- # 递归遍历所有子文件夹内全部文件
- all_recursive = [f.name for f in p.rglob("*") if f.is_file()]
复制代码
常用小需求汇总
1.只获取文件,不要文件夹
- import os
- path = r"D:\test"
- files = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]
复制代码
2.获取文件完整绝对路径
- import os
- path = r"D:\test"
- full_paths = [os.path.join(path, name) for name in os.listdir(path)]
复制代码
3.递归遍历所有子文件夹里所有文件
- import os
- def get_all_file(root_dir):
- res = []
- for root, dirs, files in os.walk(root_dir):
- for file in files:
- res.append(os.path.join(root, file))
- return res
- print(get_all_file(r"D:\test"))
复制代码
|
|