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

Python 3.6中os.open遍历文件的迭代器异常问题求助

问题根源:用错了os.open()函数呀!

你这里的核心问题是混淆了os.open()和执行系统命令的工具——os.open()是Python用来做底层文件读写的接口,它需要传入具体的文件路径和打开模式(比如os.O_RDONLY),完全不能用来执行dir *.py这种系统命令。

推测你实际写代码时可能误写成了os.popen('dir *.py')(这个函数才是用来执行系统命令并返回输出流的),不然os.open('dir *.py')应该直接报错才对。


为什么next()和for循环表现不一样?

假设你用的是os.popen('dir *.py'),它返回的是一个类文件对象:

  • 当你用iter(files)包装后,next(file_iter)只会读取输出的第一行内容,也就是你看到的那行磁盘卷标提示。
  • 而for file in files会自动遍历这个文件对象的所有行,直到流结束,所以能输出包括.py文件在内的全部结果。

更靠谱的实现方式(不依赖系统命令)

其实完全没必要调用dir命令,Python内置了跨平台的方法来获取指定扩展名的文件:

方法1:用glob.glob(最推荐)

import glob

# 获取当前目录下所有.py文件
py_files = glob.glob("*.py")
for file in py_files:
    print(file)

方法2:用os.listdir手动过滤

import os

# 可以替换成你需要的目标目录,比如 "./my_folder"
target_directory = "."
py_files = [filename for filename in os.listdir(target_directory) if filename.endswith(".py")]
for file in py_files:
    print(file)

如果你非要用系统命令的方式(不推荐,因为Windows和Linux命令不一样),建议用更现代的subprocess模块替代已废弃的os.popen:

import subprocess

# Windows下执行dir命令获取.py文件
output = subprocess.run(
    ["dir", "*.py"],
    shell=True,
    capture_output=True,
    text=True
).stdout

print(output)

这样就能准确拿到你想要的.py文件列表了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:14:18