Python中调用文件路径的正确科学方法是什么?

项目结构

-- data

* config.ini

-- lib

* __init__.py
* utils.py
* main.py

utils 内封装了读取 ini 的方法,其中路径获取方式为:

self.path = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))+'/data/config.ini'
self.cf = ConfigParser.ConfigParser()
self.cf.read(self.path)

问题描述:

lib 会被安装 site-packages 中,utils 中 self.path 获取路径错误,以下是获取错误的地址与真实地址

  • /Users/qq/Desktop/test/lib/python2.7/site-packages/hhh-1.3.1-py2.7.egg/data/config.ini
  • /Users/qq/Desktop/test/app/data/config.ini

问题

  • 请问工程内,python 调用文件路径正确科学的方法是什么?

Python中调用文件路径的正确科学方法是什么?

8 回复

self.path = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(file)), “…”))+’/data/config.ini’
self.cf = ConfigParser.ConfigParser()
self.cf.read(self.path)

这样试试?


pathlib 就对了,这是现在处理文件路径的标准方式。

from pathlib import Path

# 创建路径对象
current_dir = Path.cwd()  # 当前工作目录
home_dir = Path.home()    # 用户主目录

# 构建路径 - 用 / 运算符,很直观
config_file = current_dir / "config" / "settings.json"
data_file = home_dir / "data" / "dataset.csv"

# 路径操作
print(f"文件存在: {config_file.exists()}")
print(f"是文件: {config_file.is_file()}")
print(f"父目录: {config_file.parent}")
print(f"文件名: {config_file.name}")
print(f"后缀: {config_file.suffix}")

# 读取文件内容
if config_file.exists():
    content = config_file.read_text(encoding='utf-8')
    # 或者用 read_bytes() 读取二进制

# 写入文件
data_file.parent.mkdir(parents=True, exist_ok=True)  # 确保目录存在
data_file.write_text("your data here", encoding='utf-8')

# 遍历目录
for file_path in current_dir.glob("*.py"):  # 所有.py文件
    print(f"Python文件: {file_path}")

# 路径解析
path = Path("/home/user/docs/report.pdf")
print(f"根目录: {path.anchor}")
print(f"所有部分: {path.parts}")

pathlib 的好处是:

  • 跨平台(Windows/Unix路径自动处理)
  • 面向对象,方法链式调用
  • 不用操心字符串拼接和斜杠问题
  • Path对象可以直接传给open()等函数

老式的 os.path 还能用,但新项目建议直接用 pathlib

一句话:现在都用 pathlib.Path,别再用字符串拼接路径了。

封装逻辑有问题,配置文件路径作为参数传进去

感谢回复,问题依旧

配置文件和代码一起安装到 site-packages 里面

既然 lib 都被安装到 site-packages 中了,file 的路径就变了,不是原来的了

我习惯于把路径放在一个专门的配置文件里

回到顶部