帮我写一个python代码列出指定文件夹下所有的目录和文件 可选是否列出子文件夹及文件扩展名 也可以排除扩展名 并输出到文件
代码说明:1. 该函数通过递归遍历目录结构,列出所有文件和子目录。
-
支持控制是否包含子目录、指定包含或排除特定扩展名的文件。
-
可将结果输出到指定文件或直接打印到控制台。
-
处理了权限不足的情况,避免程序崩溃。
-
使用缩进表示目录层级结构,使输出更清晰易读。
python
import os
def list_files_and_dirs(root_dir, include_subdirs=True, include_extensions=None, exclude_extensions=None, output_file=None):
"""
列出指定文件夹下的所有目录和文件
:param root_dir: 根目录路径
:param include_subdirs: 是否包含子目录
:param include_extensions: 包含的文件扩展名列表,None表示所有
:param exclude_extensions: 排除的文件扩展名列表,None表示不排除
:param output_file: 输出文件路径,None表示输出到控制台
"""
result = []
def traverse(path, level=0):
try:
items = os.listdir(path)
except PermissionError:
result.append(f"{' ' * level}! 权限不足: {path}")
return
for item in items:
item_path = os.path.join(path, item)
if os.path.isdir(item_path):
result.append(f"{' ' * level}📁 {item}/")
if include_subdirs:
traverse(item_path, level + 1)
else:
ext = os.path.splitext(item)[1]
if include_extensions is not None and ext not in include_extensions:
continue
if exclude_extensions is not None and ext in exclude_extensions:
continue
result.append(f"{' ' * level}📄 {item}")
traverse(root_dir)
output_content = "\n".join(result)
if output_file:
with open(output_file, 'w', encoding='utf-8') as f:
f.write(output_content)
print(f"结果已输出到 {output_file}")
else:
print(output_content)
if __name__ == "__main__":
# 示例调用
list_files_and_dirs(
root_dir=".",
include_subdirs=True,
include_extensions=None,
exclude_extensions=['.tmp', '.log'],
output_file="file_list.txt"
)