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

如何从模块外运行时读取与__main__.py同目录下的文件

目录结构

foo  
├── bar  
│   ├── __main__.py  
│   └── some_file.txt  

问题原因

相对路径默认锚定执行命令时的当前工作目录,而非脚本文件本身的存放目录:

  • 你在bar/目录执行命令时,工作目录就是bar/,能正确找到同目录下的some_file.txt
  • 你在foo/目录执行命令时,工作目录是foo/,代码会尝试读取不存在的foo/some_file.txt,因此触发报错

修复方案

永久方案(修改代码,不受工作目录影响)

修改__main__.py,先获取脚本自身的存放目录,再拼接目标文件路径即可。

方案1:Python 3.4+ 推荐使用pathlib

from pathlib import Path

# 获取当前脚本所在的目录
script_dir = Path(__file__).parent
# 拼接得到目标文件的绝对路径
target_file = script_dir / "some_file.txt"

with open(target_file, 'r') as f:
    print(f.read())

方案2:兼容Python 2/3 旧版本

import os

# 获取当前脚本所在的目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接得到目标文件的绝对路径
target_file = os.path.join(script_dir, "some_file.txt")

with open(target_file, 'r') as f:
    print(f.read())

临时方案(无需修改代码)

执行命令时直接切换到bar目录再运行脚本即可:

cd bar && python __main__.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:57:03