You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术咨询:能否像读取文本文件一样将文件夹作为对象读取?

能不能把文件夹当作文件读取?

直接说结论:不行,你没法像读取普通文本文件那样用open()把文件夹当作文件对象来操作。

本质原因是,在操作系统的文件系统里,文件夹(目录)和常规文件是完全不同的实体:文件夹是用来收纳、组织其他文件/子文件夹的容器,它本身并不像文本文件那样存储可直接读取的字节流数据。open()函数的设计目标就是处理常规文件,如果你硬要把文件夹路径传给它,系统会直接报错——比如在Linux/macOS下会抛出IsADirectoryError,Windows下可能是PermissionError,明确告诉你这是个目录,不是可打开的文件。

举个反例,你如果运行这段代码:

with open("my_folder", "r") as f:
    print(f)

百分百会得到类似这样的错误:

IsADirectoryError: [Errno 21] Is a directory: 'my_folder'

那如果想操作文件夹里的内容怎么办?Python给了两个常用的方案:

方案1:用os模块(传统方式)

这个模块是Python处理文件系统的老牌工具,能完成几乎所有文件夹相关操作:

  • 列出文件夹内的所有文件和子文件夹:
import os

# 获取文件夹下的所有内容名称
all_items = os.listdir("my_folder")
print(all_items)

# 遍历并区分文件和文件夹
for item_name in all_items:
    item_path = os.path.join("my_folder", item_name)
    if os.path.isfile(item_path):
        print(f"找到文件: {item_name}")
    elif os.path.isdir(item_path):
        print(f"找到子文件夹: {item_name}")

方案2:用pathlib模块(推荐,更优雅)

这是Python 3.4+引入的面向对象式文件系统操作工具,代码更简洁易读:

from pathlib import Path

folder = Path("my_folder")

# 遍历文件夹内直接内容
for item in folder.iterdir():
    if item.is_file():
        print(f"文件: {item.name}")
    elif item.is_dir():
        print(f"子文件夹: {item.name}")

# 递归遍历所有子文件和子文件夹(包括深层嵌套的)
for sub_item in folder.rglob("*"):
    print(sub_item)

总结一下:文件夹不是“可以用open()读取的文件”,但你可以通过os或pathlib这类专门的模块来访问、管理它里面的内容。

内容的提问来源于stack exchange,提问作者Syo Genocider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:06:47