小能豆

Python 对 os.listdir 返回的文件名引发 FileNotFoundError

javascript

我试图迭代目录中的文件,如下所示:

import os

path = r'E:/somedir'

for filename in os.listdir(path):
    f = open(filename, 'r')
    ... # process the file

FileNotFoundError但即使文件存在,Python 也会抛出错误:

Traceback (most recent call last):
  File "E:/ADMTM/TestT.py", line 6, in <module>
    f = open(filename, 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'foo.txt'

那么这里到底出了什么问题?


阅读 72

收藏
2024-07-18

共1个答案

小能豆

问题出在你尝试使用 open(filename, 'r') 打开文件时,它是在当前工作目录中寻找文件而不是指定的目录中。

要解决这个问题,你需要将目录路径与文件名连接起来,以获取文件的完整路径。你可以使用 os.path.join 来完成这个任务。

这里是修正后的代码:

import os

path = r'E:/somedir'

for filename in os.listdir(path):
    full_path = os.path.join(path, filename)
    with open(full_path, 'r') as f:
        # 处理文件的代码
        pass  # 替换成你的文件处理代码

解释:

  1. os.listdir(path): 这个函数获取指定路径 path 下的文件名列表。
  2. os.path.join(path, filename): 这个函数将目录路径和文件名连接起来,生成文件的完整路径。
  3. with open(full_path, 'r') as f: 使用完整路径打开文件。

附加提示:

  • 推荐使用 with 语句打开文件,这样可以确保文件在处理完后会被正确关闭,即使发生异常也能正常处理。
  • 可以在 open 语句周围添加 try-except 块来处理可能出现的文件打开错误(如权限问题)。

以下是带有错误处理的更新代码示例:

import os

path = r'E:/somedir'

for filename in os.listdir(path):
    full_path = os.path.join(path, filename)
    try:
        with open(full_path, 'r') as f:
            # 处理文件的代码
            pass  # 替换成你的文件处理代码
    except FileNotFoundError:
        print(f"文件未找到:{full_path}")
    except Exception as e:
        print(f"打开文件 {full_path} 时出错:{e}")

这段代码将处理 FileNotFoundError,如果找不到文件,则打印消息。它还处理其他可能的异常,并打印错误消息。

2024-07-18